[프로그래머스] K번째수

Changyun Go·2021년 8월 5일
0
post-thumbnail

K번째수

문제 설명


배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

  1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
  2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
  3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한 사항


  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

나의 풀이


function solution(array, commands) {
    var result = new Array(commands.length);
    for(var x = 0; x < commands.length; x++){
        var command = commands[x];
        var i = command[0]; 
        var j = command[1]; 
        var k = command[2];
        var slice_f = array.slice(i-1,j);
        var sort_f = slice_f.sort();
        result[x] = sort_f[k-1];
        }
    var answer = result;
    return answer;
}
}

다른 사람의 풀이


function solution(array, commands) {
    let answer = [];
    for(let i = 0; i < commands.length; i++){
      let eachCommand = commands[i]
      let slice = array.slice(eachCommand[0] - 1, eachCommand[1])
      answer.push(slice.sort((a, b) => a - b)[eachCommand[2] - 1])
    }

    return answer;
}
}

P.S.

다른 사람의 풀이를 보면, 전반적으로 내가 작성한 코드와 유사하지만 변수의 수가 적고, for 문이 돌면서 빠져나오는 값을 push 메소드를 사용해서 배열에 넣어줬다는 점에서 차이점이 있다. 특히, 변수 선언에 대한 개념이 미흡하다 보니 var만 계속 남발하고 있는데😂 이 기회에 변수 타입에 대한 내용을 공부해서 정리해봐야겠다.

sort 메소드를 사용할 때 sort()로 만 작성했더니 테스트케이스 하나가 실패로 떴는데, sort( (a, b) => a - b) 형태로 sort 메소드에 compareFunction를 제공해 줘야 했다.

이번 문제를 풀면서 많이 헤맸던 부분은 for 문이 돌 때마다 생성되는 값을 배열로 가져오는 일이었다. 값을 저장해야 하는 배열을 for 문안에 두고서 헤맸으니 참 부끄럽기도 하지만😳 결국 스스로 찾고 깨달았으니 그걸로 됐다.

0개의 댓글