JS 코테 - 프로그래머스 1단계! K번째수
정말 감도 안 잡히는 문제였다.
어떤 문젠지는 이해 했고 배열이니까 배열 지식을 총 동원해서 풀면 될 것 같긴 해서 이 문제를 선택했다.
그래서 풀 순 있을 것 같은데...? 풀기 시작하니까 당최 어떻게 접근해야할지 전혀 감이 잡히지 않았다.
결국 풀었긴 함 !!
역시 0단계 풀던 나에겐 어려웠던 문제라 배운게 참 많다.
첫 시도
function solution(array, commands) {
const nums = commands.join(','); // ,기준 숫자 출력
let i = []
return nums;
}
이렇게 하면 nums는 문자열로 "2,5,3,4,4,1,1,7,3"이 출력된다. --> 다 풀고 생각했는데 flat을 쓸 수 있음..ㅋ
이를 숫자로 바꾸고(실패)
배열 안에 넣어서
for문으로 i, j, k 배열에 3개씩 할당해서 풀어보려 했으나 실패 !
i 는 숫자 % 3 === 0
j 는 숫자 % 3 === 1
k 는 숫자 % 3 === 2
제로 베이스드 넘버링 된거니까 숫자 부분엔 배열 [숫자] 이게 들어가야하는데 어케 빼는지 모르겠어서... 전혀 감이 안 잡힌다... 이게 아닌가보다...
두 번째 시도
배열 반복문으로 다 시도해봤다.
for문, for of문, forEach, map...
ㅋㅋㅋ 개같이 실패
function solution(array, commands) {
// nums1 = commands.shift()
// nums2 = commands.shift()
// nums3 = commands.shift()
let nums;
for(let num of commands) {
nums = num
}
return nums
}
세 번째 시도
감 잡았으 !!!
그냥 단순하게.. commands[0][0] 하면 될 것 같다!!!
function solution(array, commands) {
const num = array.slice(2 - 1, 5)
num.sort()
const answer = num.slice(3 - 1, 3)
return answer;
}
요 녀석을 for문으로 만들어야 한다. (실험해본거다! 결과 나와서 이제 나머지 두 개 받게 반복문으로 만들어보자...)
성공
-대강 틀은 잡음 이건 완전 통과는 아니다 1개 실패함..!-
function solution(array, commands) {
let i = 0
let j = 1;
let k = 2;
const answer = [];
for (let r = 0; r < commands.length; r++) {
const num = array.slice(commands[r][i] - 1, commands[r][j])
num.sort()
answer.push(num.slice(commands[r][k] - 1, commands[r][k]))
}
return answer.flat()
}
3트만에 성공했다...!! 풀이 시간은 1시간 걸렸다..!!!!
근데 채점하기에서 테스트 2 하나 실패
이유가 뭐지...>??
정확성은 85.7점 나왔다ㅜㅜ 이럴 때는 어케 해야하는거징
- 성공 -
function solution(array, commands) {
const answer = []
for (let i = 0; i < commands.length; i++) {
const num = array.slice(commands[i][0] - 1, commands[i][1])
num.sort((a, b) => a - b)
answer.push(num[commands[i][2] - 1])
}
return answer.flat()
}
위에껀 이해하기 쉽게 i, j, k를 설정했지만 숫자로 넣는게 코드가 더 짧아진다.(많이 쓰는 변수도 아니고)
문제는 sort였다. sort에서 a - b로 대소 비교를 해서 작은 것 부터 큰 수로 정렬을 해줘야 한다...
sort 와 sort((a, b) => a - b) 의 차이
sort() 메서드는 기본적으로 문자열 기준으로 배열의 요소를 정렬한다.
그래서 정렬을 하면 [19, 8, 5]가 있으면 [19, 5, 8]로 정렬한다.
19의 1을 우선으로 보기 때문이다.
따라서 sort((a, b) => a - b)로 대소비교를 해서 숫자 오름차순 정렬을 하게 만들어 줘야 한다.
역시 어떻게 풀건지 미리 노트에 정리하고 풀어가는 과정에도 정리한게 도움이 되었다.
하핳