Nomad Engineer

[일일코테 Day7] K번째 수 본문

개발/코딩테스트

[일일코테 Day7] K번째 수

universehan 2021. 3. 1. 13:27

문제 

programmers.co.kr/learn/courses/30/lessons/42748

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

입력 배열에서 주어인 영역에 대해서 잘나낸뒤 잘라낸 결과에서 k번째 요소를 확인 하는 함수.

Javascript

function solution(array, commands) {
    var answer = [];
    const commandCache = {}
    commands.forEach(command => {
        const start = command[0] -1;
        const end = command[1];
        const index = command[2]-1;
        // const commandKey = ('' + start) + end
        
        let value;
        // if (commandCache[commandKey]) {
        //     value = commandCache[commandKey][index];
        // } else {
            const subArray = array.slice(start, end)
            .sort((a, b) => a-b);
            // commandCache[commandKey] = subArray;
            value = subArray[index];
        // }
        
        answer.push(value);
    })
    return answer;
}

 

실수

채점을 하게되면 계속 2번쨰 채점에서 실패하게 되는데, 결국 정렬을 잘 하지 못하였다. [2, 10] 을 정렬하게 되면 [10, 2]로 정렬이 되는데 이는 javascript 기본 소팅 함수가 이벽을 유니코드로 변환한뒤에 문자열 정렬을 하는것이 원인이었음.

sort()
 메서드는 배열의 요소를 적절한 위치에 정렬한 후 그 배열을 반환합니다. 정렬은 stable sort가 아닐 수 있습니다. 기본 정렬 순서는 문자열의 유니코드 코드 포인트를 따릅니다.

삽질

  • 성능의 문제일것이라고 생각하고 Cache를 두어 계속 성능에 관련된 해결만 하려고 했다.
  • 정렬에도 문제가 있을것이라고 생각했지만 올바른 테스트 케이스를 만들지 못해서 실수를 잡아내지 못했다.

숫자 범위를 1~10 안에서만 한정했는데, 문제가 발생하는 10 이상의 숫자에서 확인을 하지 못했다.

 

회고

  • 무엇인가 Default를 사용할 때는 기본적으로 주어지는것이 어떻게 동작하는지 반드시 확인을 하자.
  • 정렬할때 반드시 확인해야 하는 테스트 케이스의 종류를 목록으로 만들어 두면 좋을것 같다.
  • 문제를 해결하는 과정에서 각각실패 할 수 있는 포인트들을 나열해 보는것도 도움이 되는것 같다. 예를들어 정렬, 자르기, 인덱싱.

 

반응형