티스토리 뷰
💡 문제
🔍 분석 및 계획
✅ 문제 이해
배열이 주어지고 [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]
})
}
'IT기초 > 프로그래머스 문제풀이' 카테고리의 다른 글
| *[프로그래머스 LV.1] #36 [1차] 다트 게임 (JavaScript) (0) | 2023.06.04 |
|---|---|
| [프로그래머스 LV.1] #35 완주하지 못한 선수 (JavaScript) (0) | 2023.06.03 |
| [프로그래머스 LV.1] #33 모의고사 (JavaScript) (0) | 2023.06.01 |
| [프로그래머스 LV.1] #32 체육복 (JavaScript) (0) | 2023.05.31 |
| [프로그래머스 LV.1] #31 크레인 인형뽑기 게임 (JavaScript) (0) | 2023.05.30 |
댓글
