Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 배열 메소드
- 서버 컴포넌트
- 동전 0
- 실전프로젝트
- 프로그래머스
- 중복선택
- 알고리즘
- 항해99추천
- JavaScript
- 항해99솔직후기
- 자바스크립트
- 탐욕알고리즘
- 클라이언트 컴포넌트
- 그리디
- NextJS v13
- 중복카테고리
- 부트캠프항해
- react
- jQuery
- 백준
- 배열 중복 제거
- 숫자를 별점으로
- 항해99
- 로딩 후 실행
- server component
- 날씨 api
- db수정
- 항해99후기
- greedy
- 카테고리필터
Archives
- Today
- Total
공부 및 일상기록
[알고리즘] K번째 수 본문
문제
문제설명
- 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고, 정렬한 뒤, k번째 숫자를 구한다.
- 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
- array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
- 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
- 2에서 나온 배열의 3번째 숫자는 5입니다.
- 이때 i,j,k를 원소로가진 2차원 배열이 commands로 주어졌을 때 commands의 모든 원소에 대한 각 숫자를 구하라
문제풀이
접근방식
일단 commands마다의 숫자를 구하는 것이므로 commands를 map함수로 돌려 각 원소에 대한 계산을 준비한다.
일단 배열의 slice메서드를 이용하면 손쉽게 잘라낸 숫자를 알 수 있다.
만약 array = [0,1,2,3,4,5]
라면, array.slice(1,4)
은 [1,2,3]이 된다.
slice(a,b)를 좀 더 쉽게 이해하려면 a번째 인덱스를 포함해서 b인덱스 직전까지의 숫자이다. (b인덱스의 숫자는 포함하지 않음)
그리고 sort를 이용해 정렬을 해준다. 그런데 프로그래머스 예시 코드에서 sort메서드의 compareFunction이 없으면 오류가 나므로 꼭 작성한다.
이렇게 구한 배열의 k번째 ( (k+1) 번 인덱스) 를 구한다.
실제 작성 코드
function solution(array, commands) {
let answer = commands.map((command) => {
return array.slice(command[0] - 1, command[1]).sort(function (a, b) {
return a - b;
})[command[2] - 1];
});
return answer;
}
이 문제는 복잡하지 않고, 어려운 메서드는 없으나, slice의 사용방법이 헷갈릴만한 문제였다.
또한 테스트 케이스에 sort함수에 compareFunction을 꼭 입력해야만 오류가 나지 않다는 것을 모르면 2번 케이스에서 오류가 나게 된다.
'개발 > 알고리즘, 자료구조' 카테고리의 다른 글
[알고리즘] 1차 비밀지도 (0) | 2023.04.20 |
---|---|
[알고리즘] 숫자 문자열과 영단어 (0) | 2023.04.20 |
[알고리즘] 약수의 개수와 덧셈 (0) | 2023.04.20 |
[알고리즘] 폰켓몬 (0) | 2023.04.20 |
문자열 내 마음대로 정렬하기 (0) | 2023.04.20 |