본문 바로가기
개발 공부/알고리즘 개념+문제풀이

[알고리즘] K번째수_프로그래머스 1단계

by 크롱이크 2021. 6. 20.

문제설명

배열 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 answer = [];
    // commands 하나씩 접근을 해야한다.
    
    for(let command of commands){
      let arr = array.slice(command[0]-1,command[1]).sort(function(a, b) {return a - b;})
      answer.push(arr[command[2]-1]);
    }
    return answer;
}

인기많은 코드

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

해석

1. commands 안에 있는 배열에 하나씩 접근해야한다. 여기서는 command로 진행했는데

command[0]-1에서 command[1] 만큼을 배열로 잘라야한다. -1이 들어가는 이유는 인덱스는 0번부터 시작하기 때문이다.

(arr1= [0,1,2,3,4] 이 배열에서 슬라이스로 [0,1,2,3] 까지만 잘라서 쓰고 싶다면, arr1.slice(0,4)를 해줘야한다.) 

 

2. .sort부터는 오름차순 정렬

3. arr[comaand[2]-1] 째 인덱스에 있는 수를 answer에 푸쉬한다. 

4. 리턴한다.

 

한줄평

인덱스와 숫자가 헷갈려 콘솔로그를 많이 돌려보았다. 문제를 잘읽어 이해하는것이 진짜 중요한듯! 인기 많은 코드를 보면 구조분해할당 사용예시가 미쳤다. 몇번 따라쳐보면서 내것으로 만들자.

 

링크

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

 

 

반응형

댓글