TIL 64 day 알고리즘/코딩테스트

Winney·2021년 1월 14일
0
post-thumbnail

k번째 수

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

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.
  • 입출력 예시 :
    array, commands => return
    [1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]] => [5, 6, 3]
function solution(array, commands) {
    var answer = [];
    const mapArr = commands.forEach(command => {
      const first = command[0];
      const second = command[1];
      const third = command[2];
      
      const sliceArr = array.slice(first-1, second);
      sliceArr.sort((a, b) => a-b)
      answer.push(sliceArr[third-1])
    })
    return answer;
}

프로그래머스에서 설명이 자세하게 되어있어서 그대로 코드로 옮기기만 하면 풀 수 있는 문제였습니다.
가독성을 1순위로 두고 이리저리 바꿔보았는데 변수명이라던가 매우 만족스럽지 못한 부분이 있습니다.
그러다가 다른 분이 푼 풀이는 보고 굉장히 감탄을 했습니다.

function solution(array, commands) {
    return commands.map(command => {
        const [sPosition, ePosition, position] = command
        const newArray = array
            .filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
            .sort((a,b) => a - b)    

        return newArray[position - 1]
    })
}

구조분해할당을 한 부분이 코드를 굉장히 깔끔하게 보이면서 변수명도 바로 알아차릴 수 있는 점에서 굉장히 마음에 들었던 풀이입니다.
게다가 filter를 사용한 풀이라는 점도 눈길이 갔습니다.
대부분 slice를 사용한 풀이가 많았고 저도 slice를 사용했고요.

개인적으로 코드를 무작정 줄여쓰기보다 가독성이 우선되어야 한다라는 생각을 가지고 있는데 간결하면서도 가독성을 높일 수 있도록 더 정진해야겠다는 생각을 하게됩니다!

profile
프론트엔드 엔지니어

0개의 댓글