dukDukz

[1단계] K번째 수 본문

코딩테스트

[1단계] K번째 수

헤일리_HJ 2021. 4. 11. 14:29

문제

 

 

 

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

im-developer.tistory.com/103

 

4. .sort

 

5. .push

gent.tistory.com/295

 

 

 

 

 

 

+ 연습본

 

더보기
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