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

Gaeun·2022년 11월 22일
0

프로그래머스 Lv.1

목록 보기
6/11

K번째 수

나의 풀이


function solution(array, commands) {
  // commands는 [i, j, k]를 원소로 가지고 있음

  // commands에 따라 자를 배열
  const sliced = [];

  for (let i in commands) {
    const ith = commands[i][0];
    const jth = commands[i][1];

    // 변수 ith가 i번째 인덱스를 의미하는 것이 아니므로 -1을 해주어야 함
    const start = ith - 1;
    const end = jth;

    sliced.push(array.slice(start, end));

    // commands에 따라 정렬
    sliced[i].sort((a, b) => a - b);
  }

  // 반환할 배열
  const result = [];

  for (let i in commands) {
    const kth = commands[i][2];
    result.push(sliced[i][kth - 1]);
  }

  return result;
}

다른 사람의 풀이

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]
    })
}

평소였다면 '하... 코드 참 드럽게 작성해서 풀었네🤯 그래도 풀었으니 나 자신 백만점~😇🫶 다른 사람 코드 한번 보고 다음 문제나 풀어야지~' 하면서 내 칭찬을 하고 있었을텐데, 이 풀이를 본 이후에는 '하... 코드 참 드럽게 작성해서 풀었네🤯 나 자신 마이너스 백만점~🥹'으로 감정이 급격히 바뀌었다.

자바스크립트를 공부하면서 아직까지 잘 이해하지 못하고 활용하지 못하는 부분이 몇 가지 있는데, 예를 들면 return을 쓰고, 그 블럭 안에 또 return을 쓰는 경우라든가, 화살표 함수를 이용해서 이런 저런 메서드들을 연결하는 경우라든가, 그리고 구조 분해 할당을 사용하는 경우라든가... 등등이 있다. 근데... 이 풀이는 내가 잘 이해하지 못하고 활용하지 못하는 모든 것들을 압축해놓았다.

콘솔에 하나씩 찍어 보면서 내가 잘 몰랐던 부분을 이 코드를 통해 공부해보았다.

우선, return을 쓰고 그 블럭 안에 또 return을 한 이유는, 코드 마지막 줄에 있는 (블럭 안에 있는) return에서 newArray[position - 1]을 반환하여야만 첫 return에서 map을 하여 정답을 반환할 수 있기 때문이라고 이해했다.

그리고 구조 분해 할당. 아직 내 단어로 명확하게 설명할 수 있을 정도의 이해는 하지 못했지만, 어렴풋이 어떤 상황에서, 어떻게 사용하는 게 좋을지는 조금 이해하게 되었다.

역시나 오늘도 조금 더, 아니, 많이 더 공부해야겠단 생각으로 포스트 작성을 마친다. 아자자.💪

profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글