티스토리 뷰

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42747

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

프로그래머스 코딩테스트 고득점 Kit의 정렬 Level 2 문제다.

 

 

만약에 [1, 0, 0] 이 입력으로 들어온다면 1편의 논문이 1회 이상 인용되었으므로 1이 반환될 것이다.

또한 [5, 4, 3, 1, 1] 이 입력으로 들어온다면 3편의 논문이 3회 이상 인용되었으므로 3이 반환될 것이다.

 

여기서 규칙을 찾을 수 있다.

논문을 내림차순으로 정렬하고, 배열을 앞에부터 탐색한다.

앞에 원소가 1회 이상 인용되었다면 그 다음 원소가 2회 이상 인용되었는지 확인하고,

또 그 다음 원소가 3회 이상 인용되었는지 확인한다.

 

이렇게 계속 n번째 원소가 n번 이상 인용되지 않았을 때까지 탐색하면 된다.

이 때 조건을 만족할 때마다 answer에 n을 대입하고,

조건을 만족하지 않을 때 빠져나온다면 answer이 정답이 된다.

 

 

이때 citations 배열을 Integer 배열로 변경해준 이유는

Arrays와 Collections을 통한 내림차순 정렬은 Integer형 배열만 가능하기 때문이다.

(물론 오름차순 정렬로도 풀 수 있다)

 

푸는 건 정말 간단한데, 문제를 잘못 이해해서 좀 헤맸던 문제다.

 

import java.util.Arrays;
import java.util.Collections;

class Solution {
    public int solution(int[] citations) {
        int cnt = 1;
        int answer = 0;
        
        Integer[] arr = Arrays.stream(citations).boxed().toArray(Integer[]::new);
        Arrays.sort(arr, Collections.reverseOrder());
        
        while(cnt - 1 < arr.length) {
            if(arr[cnt - 1] >= cnt)
                answer = cnt;
            else 
            	break;
            cnt++;
        }
        
        return answer;
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함