https://www.acmicpc.net/problem/5597
5597번: 과제 안 내신 분..?
X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,
www.acmicpc.net
문제

코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int[] std = new int[30];
int[] check = new int[30];
for(int i = 0; i < 28; i++) {
st = new StringTokenizer(br.readLine());
std[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(std);
for(int i = 0; i < 30; i++) {
if(i == 0 || i == 1) continue;
check[std[i] - 1] = 1;
}
for(int i = 0; i < 30; i++){
if(check[i] == 0) System.out.println(i + 1);
}
br.close();
}
}
1) 먼저 출석 번호 배열과 체크 배열을 크기 30으로 만들어 준다.
2) 출석 번호를 28번 입력을 받고 정렬을 하면 인덱스 0, 1은 0으로 비어있을 것이다.

3) 그래서 다음 for문을 돌릴 때 i가 0, 1이면 continue 해주고 check 배열에 출석번호를 인덱스로 줘서 해당하는 check를 1로 할당한다. 그럼 다음과 같이 check 배열이 만들어질 것이다.

4) 출력할 때는 출석 번호를 출력해야하기 때문에 1을 더해서 출력한다.
