TIL 21.07.14

김지욱·2021년 7월 24일

TIL

목록 보기
3/5

# 알고리즘

프로그래머스 k번째수

문제 링크

let arr = [1, 5, 2, 6, 3, 7, 4] ;

function solution(array, commands) {
var answer = [];

const composeArray = (arr, i, j, k) => {
    return answer.push(arr.slice(i-1, j).sort()[k-1]);
 };

commands.map((command) => {
    composeArray(array, command[0], command[1], command[2])
    return;
 })
return answer;

}

테스트 케이스 하나만 통과를 하지 못했었다. 맞다고 생각했는데 어떤 경우에서 테스트가 통과되지 않는지 모르겠다. 여러 조건을 추가해 보아도 같은 결과였다.

오후에 문제를 다시 보고 잘못된 부분을 찾을 수 있었다. 문제는 sort 를 잘못 사용하고 있었다.

sort함수는 기본적으로 문자 순서로 정렬되어서 숫자의 크기대로 나오지 않는다. 그래서 해당 문제에서
[3, 1, 21, 5, 4] 같은 경우에 [1, 21, 3, 4, 5] 로 정렬되어서 테스트가 통과하지 못했다.

function solution(array, commands) {
var answer = [];

const composeArray = (arr, i, j, k) => {
    const result = (arr.slice(i-1, j).sort(((a,b) => a-b))[k-1]);
    result ? answer.push(result) : null
};

commands.map((command) => {
    const [i, j, k] = command;
    composeArray(array, i, j, k)
    return;
})
return answer;

}

정렬을 수정해서 테스트를 통과할 수 있었다. command[0] 부분은 보기 좋지 않았는데 구조분해 할당을 사용해서 조금 더 깔끔하게 수정했다.

# 계획 세우기

어제는 중구난방으로 작업을 진행하느라 속도도 안 나고 피곤했었다. 그래서 오늘은 해야 할 일들과 구체적인 계획을 세우는 것에 시간을 조금 더 들였다. 확실한 지표가 정해져 있어서 어제 보다 훨씬 수월하게 일을 진행할 수 있었다.

# 테스트 주도 개발

1부 화폐 예제까지 읽었다. 실무에서 TDD를 적용하면서 간단한 API 테스트는 익숙해지고 있는데 복잡한 문제가 나올수록 지금 내가 제대로 하고 있는 게 맞나 싶은 의문이 들어서 읽기 시작한 책이었다.

1부는 전혀 모르는 자바 코드로 예시를 설명하고 있었지만 일단 봤다. 대략적인 흐름만이라도 이해하려고 했는데 생각보다도 더 이해하기 가 어려웠다. 예제를 다 이해하지 못하고 글만 읽고 넘어가 버린 느낌이다.

0개의 댓글