알고리즘 #0009

박영무·2025년 1월 17일

JAVA 알고리즘

목록 보기
9/11

I. 문제 상황

1. 초기 코드 작성

  • 주어진 문제에 따라 입력한 배열에서 k 값 이상이 k번 있는 k의 최댓값을 구해야 한다.
  • 아래의 [코드 1]처럼 코드를 작성한다.

  • [코드 1] 처음 작성한 코드 답안
class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        for (int i = citations.length-1 ; i >= 0; i--) {
            int count = 0;
            for (int j = 0; j < citations.length; j++) {
                if (citations[j] >= i) {
                    count++;
                }
            }
            if (i == count) {
                answer = i;
                break;
            }
        }
        return answer;
    }
}

2. 실행 결과

  • 일부 테스트 케이스에서 오류가 발생되었다.
  • [결과 1]

II. 문제 분석

1. 디버깅

  • 배열의 길이가 1일 경우 기존 코드에서 i가 0이고, citations[0]이 0 이상이기만 하면 항상 count 값이 증가하게 된다.

2. 코드 수정

  • 이중 for문을 사용하면 배열의 길이가 1일 때 예외 처리를 하기 어려워진다. 이런 문제를 해결하기 위해 배열을 먼저 정렬시키고 단일 for문을 사용하고자 한다.
  • citations 배열을 정렬시키고 배열의 어떤 인덱스에 있는 값이 해당 인덱스보다 1 이상 큰 값을 가지고 있는 최소 인덱스를 구하여 배열의 길이에서 빼주면 된다.

  • [코드 2]

3. 결과

  • [결과 2]
profile
시행착오는 성장의 밑거름입니다.

0개의 댓글