안녕하세요
프로그래머스 JS [정렬] [3/3] 본문
K번째 수 문제 보기 (5)
문제 포인트
- 1번째 부터 시작하기 때문에 i번째, k번째 인덱스를 구하려면 -1을 해주어야 합니다.
function solution(array, commands) {
const result = []
commands.forEach(([i,j,k],index) => {
result.push(array.slice(i-1,j).sort((a,b) => a-b)[k-1])
})
return result
}
가장 큰 수 문제 보기 (***)
문제 포인트 sort() 활용
- a와 b의 모양을 "ab"와 "ba" 로 만든 결과를 비교하여 조합하였을 때도 물론 대소를 비교할 수 있다.
1, 9, 19, 91를 예시로정렬 과정을 시각화해보자.
19 & 91 => 19 < 91 이므로
9, 1, 19, 91 이 된다.
1 & 19 => 119 < 191
9, 19, 1, 91 이 된다.
19 & 91 => 1991 < 9119
9, 19, 91, 1 이 된다.
19 & 91 => 1991 < 9119
9, 91, 19, 1 이 된다.
19 & 1 => 191 > 119
9, 91, 19 ,1
이렇게 두 개의 숫자끼리 조합한 형태만 대소비교 하여도 가장 큰 수의 형태를 만들 수 있다.
- "0000"이라는 숫자는 존재하지 않으므로 0이 여러개인 경우엔 결과를 "0" 으로 만들어주어야 한다.
const solution = (numbers) => {
const result =
numbers
.map(String) // 문자열로 만들기
.sort((a, b) => b + a - (a + b)) // "ab"와 "ba" 형태의 대소를 비교하기
.join(""); // 문자열 형태로 만들기
return result * 1 ===0 ? "0" : result // "000"같은 경우엔 "0" 반환하기
};
H-index Level 2 문제 보기 (5)
문제 이해가 안된다
말이 이해가 안돼서 그렇지 이해만 하면 구현은 어렵지 않다.
https://www.ibric.org/myboard/read.php?Board=news&id=270333
// 자신이 저널에 등재한 전체 논문중 많이 인용된 순으로 정렬한 후
// 피인용수가 논문수와 같아지거나,
// 피인용수가 논문수보다 작아지기 시작하는 숫자가 바로 나의 h가 됩니다.
이 말에 따르면 for문을 써서
if (인용된 수 <= i ) return i
이렇게 구할 수 있는데, 이렇게 해 보면 틀렸다고 나온다.
왜냐면,
[10,10,10] 은 3편 이상 인용된 논문이 3편 이상이니 h=3 이 되어야하기 때문이다
아주 쉽게 말해
논문을 세린 수 보다 인용된 횟수가 더 큰 논문이 몇 개인지 찾으란 말이다.
이렇게 적어놨으면 이 문제 틀리는 사람도 없었을 것이다.
(논란의 문장)
(논란을 더 키운 예시)
function solution(citations) {
const sorted = citations.sort((a, b) => b - a);
let h = 0;
for (let i = 0; i < sorted.length; i++) {
if (sorted[i] > h) {
h++;
} else {
return h;
}
}
}
solution([9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999, 9999]);
'프로그래머스' 카테고리의 다른 글
프로그래머스 JS 스택/큐 [6/6] (0) | 2023.11.17 |
---|---|
프로그래머스 JS 깊이/너비 우선 탐색(DFS/BFS) [4/7] (0) | 2023.09.12 |
프로그래머스 JS 해시 [4/5] (0) | 2023.09.03 |
2021 카카오 신입 공채 1차 온라인 코딩테스트 (조합, 이진탐색) (0) | 2023.08.31 |
2022 카카오 신입 공채 1차 온라인 코딩테스트 (누적합) (0) | 2023.08.28 |