[JAVA] 백준 5597번 (과제 안 내신 분..?)

문제: X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.

입력: 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.

출력: 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를출력한다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] Student = new int[31];

        for (int i = 1; i <= 28; i++) {
            Student[Integer.parseInt(br.readLine())]++;
        }

        for (int i = 1; i <=30; i++) {
            if (Student[i] == 0) {
                System.out.println(i);
            }
        }
    }
}

처음 생각한 흐름

1. 변수 (학생수 N = 30)
2. 변수 N을 오름차순으로 정렬
2. for (i를 1부터 N까지)
   -> 학생수가 30명이기 떄문에 i부터 30까지 반복문을 실행
        if (N의 수(학생 번호)가 i에 없으면)( i != N) {
                변수에 미제출 학생을 담음
                }
                ->빠진 학생 수 2명을 찾음
3. println을 사용해서 미제출 학생 2명을 출력

reference

1. Student 배열 생성
2. 첫 번째 for문 (1~28까지 돌림)
->28명의 과제 제출한 사람을 br을 사용해 입력받는 반복문
3. 두 번째 for문 (1~30까지 돌림)
        if (i번 학생의 값이 0이면) {
        ->1~30까지 돌리는데 i번호 학생이 미제출을 했으면 값이 0임
                println(i)를 사용하여 출력
                ->미제출 학생의 번호인 i를 출력
         }

Integer.parseInt(): 문자열을 숫자로 변환시킴 br.readLine(): 엔터(줄바꿈)”을 기준으로 입력받음