dukDukz
[1단계] K번째 수 본문
문제
답
function solution(array, commands) {
var answer = [];
for(var i=0; i<commands.length;i++){
var newArr = array.slice(commands[i][0]-1,commands[i][1]);
newArr.sort(function(a,b){return a-b});
answer.push(newArr[commands[i][2]-1]);
}
return answer;
}
function solution(array, commands) {
var answer = [];
var array= [1, 5, 2, 6, 3, 7, 4];
var commands =[[2, 5, 3], [4, 4, 1], [1, 7, 3]] ;
console.log("array = "+array);
console.log("commands.length = "+commands.length);
for(var i=0; i<commands.length;i++){
var newArr = array.slice(commands[i][0]-1,commands[i][1]);
console.log("i = "+i);
console.log(commands[i][0]-1);
console.log(commands[i][1]);
console.log("newArr ="+newArr);
var newAsort = newArr.sort(function(a,b){return a-b});
console.log("newArr.sort = "+newAsort);
console.log( "현재 newArr = "+ newArr);
var fans = answer.push(newArr[commands[i][2]-1]);
console.log("newArr[commands["+i+"][2]-1] = "+newArr[commands[i][2]-1]);
console.log("i="+i+" & (배열) answer=["+answer+"]");
console.log("----------------------------------------------------");
}
return answer;
}
solution();
주어진 값
array = [1, 5, 2, 6, 3, 7, 4];
commands [ [2,5,3], [4,4,1], [1,7,3] ];
var answer = [ ];
answer이라는 빈 배열을 하나 선언한다. 여기에 최종 값을 .push로 담을 것이다.
for( var i=0; i<commands.length; i++)
i = 0부터 commands라는 이중배열의 길이만큼 i를 ++ 해준다.
여기선 commands라는 이중배열의 길이는 3 이다.
var newArr = array.slice(commands[i][0]-1 , commands[i][1]);
배열.slice(시작점, 끝점) 을 사용해서 필요한 부분을 잘라낸다.
commands [ [2,5,3], [4,4,1], [1,7,3] ]
i = 0 인 경우,
①
commands[0][0] - 1 --> 2-1 = 1
-1을 하는 이유는 배열의 index는 0부터 시작을 하는 반면,
commands에서 제시한 순번은 0번째가 아니라 1번째 부터 시작하기 때문이다.
그래서 -1을 해서 배열의 index값이랑 순번이랑 맞춰주는 것이다.
②
commands[0][1] --> 5
var newArr = array.slice(1,5);
0 1 2 3 4 5 6 (배열의 index 순서 값)
array = [1, 5, 2, 6, 3, 7, 4];
array.slice(1,5) 을 사용해서 필요한 부분을 잘라낸다.
여기서 시작점은 포함, 끝점은 미포함이다.
잘라낸 값을 newArr에 넣었으므로 newArr= [5, 2, 6, 3] 이 된다.
newArr.sort(function(a,b){return a-b;});
newArr.sort 정렬함수를 사용해 오름차순으로 맞춰준다.
1) 오름차순
배열.sort(function(a, b) { return a - b; });
2) 내림차순
배열.sort(function(a, b) { return b - a; });
newArr.sort(function(a,b){return a-b;});
newArr라는 배열을 오름차순 하겠다는 의미이다.
newArr = [2 , 3 , 5, 6];
answer.push = newArr[commands[i][2]-1];
여기서 이제 세번째 숫자를 뽑아서 answer이라는 최종 배열에 넣어줄 것이다.
answer이라는 배열에 .push로 값을 하나씩 추가해준다.
배열.push('요소'); // 배열의 끝에 요소를 추가
newArr의 세번째에 있는 숫자를 뽑아야 하는데
그 세번째 라는 값은 맨처음 이중배열(commands)에서의 k 값이다. 그 값을 가져와야 한다.
commands[i][2]-1
여기서 2는 3번째이다. 배열의 index는 0부터 시작하기 때문이다.
-1을 해주는 이유는 k에 적혀있는 숫자는 3번째이지만 실제 배열에서는 0부터 시작하므로 2번째가 되기 때문이다.
그래서 commands라는 이중배열의 0,2에 있는 숫자를 가져와서 1을 빼준 값을 쓰는 것이다.
newArr[2] 가 들어가는데 index 2번째에 있는 값은 5 이다.
이 값을 최종 배열은 answer에 넣어주면 끝이다.
이렇게 i 가 이중배열의 길이 만큼 돌다가 끝나면 answer이 완성된다.
[새로운 개념들]
1. 배열
2. 이중 배열
3. .slice
4. .sort
5. .push
+ 연습본
function solution(array, commands) {
var array = [1, 5, 2, 6, 3, 7, 4];
var commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]];
var result = [];
for(i=0; i<commands.length; i++){
newArr = array.slice(commands[i][0]-1 , commands[i][1]);
// newArr는 array의 2번째 부터 5번째 까지 자른 값이다.
newArr.sort(function(a,b){return a-b;});
// 그 newArr를 오름차순으로 정렬해준다.
result.push(newArr[i][2]-1);
// newArr의 3번째 값만 빼서 result라는 배열에 넣어준다.
}
return result;
}
solution();
'코딩테스트' 카테고리의 다른 글
집합 자료형 (0) | 2023.03.16 |
---|---|
[프로그래머스_1단계] 가운데 글자 (0) | 2021.04.18 |
[프로그래머스 _ 1단계] 2016 (0) | 2021.04.18 |