티스토리 뷰

💡 문제

k번째수

 

🔍 분석 및 계획

 문제 이해

배열이 주어지고 [i, j, k] 형태로 1개 이상이 담긴 2차원 배열이 주어질때, 배열에 대해 i번째숫자부터 j번째 숫자까지 자르고 정렬했을 시 의 k번째 수를 담은 배열을 반환하는 문제이다

 

  • 입력 값 : 배열 array, [i,j,k]쌍을 담은 2차원 배열 commands
    - 1 <= array의 길이 <= 100
    - 1 <= array의 값 <= 100
    - 1 <= commands의 길이 <= 50
    - commands의 각 원소의 길이 = 3 / 오류값 없음
  • 출력 값 : 연산적용한 결과들을 담은 배열

반복하는 부분을 제외하면 풀이는 크게 3단계로 나타낼 수 있다

 

반복문으로 commands 순회

1. i번째부터 j번째까지 자르기 => slice(i-1, j)

2. 자른 배열을 오름차순으로 정렬하기 => sort((a,b) => a-b))

3. 정렬한 배열에서 k번째수를 가져와 출력할 배열에 저장 => push, at(k-1)

출력할 배열을 반환

 

 

 의사코드 작성

// commands를 반복문을 이용해서 순회
  //i번째부터 j번째까지 자르기
  //자른 배열을 오름차순으로 정렬하기
  //정렬한 배열에서 k번째수를 가져와 출력할 배열에 저장
//출력할 배열을 반환

 

 

📝 코드 구현

의사코드 + 코드

수정사항

1. 순회할 배열의 길이와 결과값의 길이가 같으므로 순회시 map 함수를 사용하여 원소값을 바로 변환해준 후 별도의 배열을 만들지 않고 바로 return 반환

function solution(array, commands) {
  // commands를 반복문을 이용해서 순회
  return commands.map((v) => {
    //i번째부터 j번째까지 자르기
    //자른 배열을 오름차순으로 정렬하기
    //정렬한 배열에서 k번째수를 가져와 출력할 배열에 저장
    //출력할 배열을 반환
    return array.slice(v[0] - 1, v[1]).sort((a, b) => a - b)[v[2] - 1];
  });
}

 

최종 코드

function solution(array, commands) {
  return commands.map((v) => {
    return array.slice(v[0] - 1, v[1]).sort((a, b) => a - b)[v[2] - 1];
  });
}

시간 복잡도 : O(n²)

 

💭 되돌아 보기

 다른 사람 풀이

 

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]
    })
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함