알고리즘/문제

[백준] 5597번 문제: 과제 안 내신 분..? - JAVA

Retro Rat 2026. 3. 19. 23:59

https://www.acmicpc.net/problem/5597

[문제]


[해설]

1. 문제 이해

  • 전체 상황: 1번부터 30번까지 총 30명의 학생이 있습니다.
  • 입력 데이터: 과제를 제출한 28명의 출석번호가 주어집니다.
  • 목표: 30명 중 제출하지 않은 남은 2명의 번호를 찾아 작은 번호부터 출력하는 것입니다.

2. 핵심 아이디어

  • 체크리스트 활용 (Boolean Array): 30명의 상태를 저장할 수 있는 boolean 배열(isCheck)을 선언합니다. 기본값은 전부 false입니다.
  • 제출 처리: 28번의 입력을 받으면서 해당 번호의 배열 요소를 true로 변경합니다. (예: 5번이 입력되면 isCheck[4] = true)
  • 미제출자 색출: 배열을 처음부터 끝까지(0~29) 순회하며 값이 여전히 false인 인덱스를 찾아 출력합니다.
  • 시간 복잡도: 입력 28번, 확인 30번으로 매우 효율적인 $O(1)$(상수 시간) 수준의 풀이입니다.

[코드]

public class BeakJoon_5597 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        boolean[] isCheck = new boolean[30];
        

        for (int i=1; i<=28; i++) {
            int n = sc.nextInt();

            for (int j=0; j<30; j++) {
                if (n == (j+1)) {
                    isCheck[j] = true;
                }
            }
        }
        
        for (int i=0; i<30; i++) {
            if (!(isCheck[i])) {
                System.out.println(i+1);
            }
        }
        sc.close();
    }
}