https://school.programmers.co.kr/learn/courses/30/lessons/42747
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✓ 문제
h번 이상 인용된 논문 h편 이상일 때 최대 h값 찾기
✓ 풀이과정
처음에는 아래 코드와 같이 구현했습니다
function solution(citations) {
let h = citations.length;
for (h; h > -1; h--) {
if (citations.filter((c) => c >= h).length >= h) break;
}
return h;
}
논문 길이만큼 반복하면서 h보다 큰 인용 횟수를 가진 논문의 수를 찾으면 그 수를 반환하는 방법으로 해결했는데
해결하고 나서 왜 이 문제가 정렬문제인거지? 의문이 들었는데 다른 분들의 풀이를 확인하고 filter를 사용하지 않는 방법으로 더 효율적으로 해결할 수 있는 방법이 있었습니다
h는 다음 조건만 만족하면 됩니다 → h번 이상 인용된 h편 이상의 논문
생각해보면 h번 이상 이라는 조건은 citations를 매번 돌면서 확인할 필요없이 citations를 큰 순으로 한번 정렬해두고
이후에 citations[h-1] >= h 을 확인하면 됩니다
citations = [3, 0, 6, 1, 5] 일 경우 [ 6, 5, 3, 1, 0 ] 으로 정렬 해두고 아래 과정을 순서대로 반복하며 3을 반환합니다
0 >= 1 → false
1 >= 2 → false
3 >= 3 → true → return h = 3
5 >= 4
6 >= 5
✓ 최종코드
function solution(citations) {
citations.sort((a, b) => b - a);
let h = citations.length;
for (h; h > 0; h--) {
if (citations[h - 1] >= h) break;
}
return h;
}'프로그래머스 > Lv2' 카테고리의 다른 글
| [프로그래머스/Javascript] Lv.2 기능개발 (0) | 2026.02.09 |
|---|---|
| [프로그래머스/Javascript] Lv.2 구명보트 (0) | 2026.02.04 |
| [프로그래머스/Javascript] Lv.2 카펫 (0) | 2026.02.03 |
| [프로그래머스/Javascript] Lv.2 N개의 최소공배수 (0) | 2026.02.02 |