-
프로그래머스 JS I 1단계 : K번째 수문제풀이 2023. 1. 11. 18:58
프로그래머스 1단계 문제
K번째 수
array 라는 배열에 담긴 숫자(요소)들.
이 숫자들을 commands에 들어있는 배열 안 요소를 사용하여 연산하기.
💭
어떻게 풀까?
1. commands는 다중 배열이므로 각각 사용할 수 있도록 해야한다. (-> forEach를 사용하여 한 요소씩 확인-사용)
2. array에 담긴 배열을 commands안의 요소 [i, j, k] 배열을 사용하여 잘라야 한다. (-> slice 사용 - 여기서 이름 헷갈려서 splice 써놓고 왜 안되냐고 고민함... 민망)
2-2. slice 의 조건은 i-1(index는 0부터 시작해야 하므로) 부터 j까지(end 조건인 j는 포함되지 않으므로 -1 해주지 않아도 된다) 로 설정한다.
3. 빈 배열인 answer에 push 한다.
4. 완성된 answe을 return 한다.
완성 코드 👇
막혔던 부분💭
slice 대신에 splice를 사용했다. (ㅋㅋㅋ ㅠㅠ)
단순히 이름이 헷갈려서 사용했는데 ... 그럴수록 한 번 더 읽고 넘어가야 하는 법~ (왜이렇게 비슷하게 생겼냐고~)
slice(begin, end)
slice는 begin 부터 end 전까지의(end번째는 포함되지 않음) 요소에 대한 새로운 배열로 반환한다.
즉, 원본 배열은 바뀌지 않는다.
splice(start, [deletecount, [item, [item2 ... ]])
배열에서 요소를 추가, 삭제, 교체해서 배열의 내용을 변경한다.
즉, 원본 배열이 변경된다.
다르게는 못풀까?💭
forEach 메서드 대신에 map을 사용해서 풀 수 있지 않을까?
map도 요소 각각에 함수를 호출한 결과를 모아서!! 배열로 반환하니까.
그래서 풀어봤다.
근데 전체적으로 달라지는 건 거의 없었다 ...
answer 변수를 굳이 만들지 않았다는 것과 (대신 가독성을 너무 해치는 느낌이라 arr 변수를 만들어서 정리했다)
forEach 자리에 map이 들어갔다는 것 정도...
또 다른 방법은 없을까~ 생각해봐야겠다.
다른 사람 풀이👏
댓글도 많고~ 추천도 많은~ 신기한 풀이가 있어서 가져와봤다.
function solution(array, commands) { return commands.map(command => { const [sPosition, ePosition, position] = command const newArray = array .filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1) .sort((a,b) => a - b) return newArray[position - 1] }) }
풀이, 댓글을 읽고 궁금한 점이 생겨서 남겨둔다.
* 구조 분해 할당 ?
구조 분해 할당 < 이 대단하다! 라는 댓글이 꽤나 보였다.
그걸 읽은 나 : 구조 분해 할당 ... ? 그게 뭔데 ...
일단 뭐든지 MDN부터 찾아보는 법 .. 당장 찾아봤다 🤸🏻링크
구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.
객체 및 배열 리터럴 표현식을 사용하면 즉석에서 쉽게 데이터 뭉치를 만들 수 있습니다.//MDN 예문 let a, b, rest; [a, b] = [10, 20]; console.log(a); // expected output: 10 console.log(b); // expected output: 20 [a, b, ...rest] = [10, 20, 30, 40, 50]; console.log(rest); // expected output: Array [30, 40, 50]
구조 분해 할당이 사용된 곳이
const [sPosition, ePosition, position] = command;
라는 걸 알 수 있다.
command 는 commands 각각의 요소가 담길 변수의 이름이다.
command에 담길 각각의 요소는 세 개의 숫자(요소)가 담긴 배열이다.
예를 들어, command가 현재 [1,2,3]이라면 sPositon = 1 / ePosition = 2 / position = 3이 되는 것.
필요한 데이터들에 손쉽게 이름을 붙여서 사용할 수 있다!
하지만 응용해야 할 때 응용할 수 있을 것인가 ... 그건 두고봐야 할 것 같다.
그밖에도 좋은 코드란 뭘까 라는 어떤 코드일까 ... 라는 고민이 생기고 있다.
이것도 언제 한 번 생각정리 겸 포스팅해봐야겠다!
오늘도 힘냈다! 아자!
'문제풀이' 카테고리의 다른 글
프로그래머스 JS I 1단계 : 이상한 문자 만들기, 시저 암호 (1) 2023.01.09 프로그래머스 JS I 0단계 : 문자열 밀기 (0) 2022.12.18 프로그래머스 JS | 0단계 : 369게임 (0) 2022.12.14