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();
}
}'알고리즘 > 문제' 카테고리의 다른 글
| [백준] 10807번 문제: 개수 세기 - JAVA (0) | 2026.03.17 |
|---|---|
| [백준] 10871번 문제: X보다 작은 수 - JAVA (0) | 2026.03.17 |
| [백준] 10872번 문제: 팩토리얼 - JAVA (0) | 2026.03.16 |
| [백준] 15649번: N과 M (1) - JAVA (0) | 2026.03.16 |
| [백준] 2566번 문제 - JAVA (0) | 2026.03.09 |