728x90
반응형
안녕하세요. 민쯔입니다.😊
이번에는 K번째수 문제 해결방안에 대해 설명하겠습니다.
이 문제는 문제 설명에서
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
로 되어있습니다.
저는 이문제 보자마자
몇 번부터 몇 번째까지 자르면 : slice();
배열을 정렬하면 : sort();
를 쓰면 되겠다는 생각이 들었어요.
function solution(array, commands) {
var answer = [];
let sliceArr = [];
for(let a=0; a<commands.length; a++){
let i = commands[a][0];
let j = commands[a][1];
let k = commands[a][2];
sliceArr = array.slice(i-1, j);
sliceArr.sort((a,b) => a - b);
answer.push(sliceArr[k-1]);
}
return answer;
}
let sliceArr = [];
- 저는 몇번부터 몇 번째까지 자를 때 담을 배열을 만들었습니다.
for(let a=0; a<commands.length; a++)
- commands.length : 3
- commands[[2, 5, 3], [4, 4, 1], [1, 7, 3]]
- for문에서 a는 0, 1, 2이 나옵니다.
let i = commands[a][0];
let j = commands[a][1];
let k = commands[a][2];
- "배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다."에 있는 i, j, k를 그대로 가지고 왔습니다.
- 만약 a가 0이라고 하면
- commands[[2, 5, 3], [4, 4, 1], [1, 7, 3]]
- let i = commands[0][0]; = 2
- let j = commands[0][1]; = 5
- let k = commands[0][2]; =3
sliceArr = array.slice(i-1, j);
- slice : 배열의 시작부터 끝까지에 대해 새로운 배열 객체로 반환합니다. 원본 배열은 바뀌지 않습니다.
- slice(첫 번째 자리, 마지막 자리);
- 첫번째 자리에 i-1을 넣은 이유는 slice에서는 0부터 시작하는데 문제설명에서는 1부터 시작하기 때문에 -1를 넣었습니다.
- 이러면 "i번째 숫자부터 j번째 숫자까지 자르고"까지 해결이 됩니다.
sliceArr.sort((a,b) => a - b);
- sort() : 배열 정렬
- sort()만 쓰면 테스트2번에서 계속 오류가 납니다.
- 이유는 잘은 모르겠는데 compareFunction이 없어서 그런 거라고 하더라고요.
- sort((a,b)=>a-b); //오름차순
- sort((a,b)=>b-a); //내림차순
- "정렬했을 때" 해결
answer.push(sliceArr[k-1]);
- answer빈배열에다가 k번째에 있는 수를 push를 사용해서 넣어주었습니다.
- k-1를 넣은 이유는 0부터 시작이 아닌 1부터 시작으로 되어 있어 -1를 해주었습니다.
여기까지 해결방법이었습니다.
이번 꺼는 뭔가 풀만했는데 묘하게 돌아가는 기분이 드는데 맞게 푼 거겠지요ㅋㅋ
다들 map이라 filter 쓰던데 뭔가 이해가 잘 안돼서 제가 이해하는 방향으로 풀어보았어요.
728x90
반응형
'코딩 > 프로그래머스 코딩테스트' 카테고리의 다른 글
[프로그래머스] 약수의 개수와 덧셈 (0) | 2021.10.14 |
---|---|
[프로그래머스] 예산 (0) | 2021.10.06 |
[프로그래머스] 내적 (0) | 2021.09.24 |
[프로그래머스] 없는 숫자 더하기 (0) | 2021.09.17 |
[프로그래머스] 신규 아이디 추천 (0) | 2021.09.10 |