Algorithm/Baekjoon(Java)

[백준/JAVA] 5597 : 과제 안 내신 분..?

비망노트 2022. 12. 5. 21:19
문제

X대학 M교수님은 프로그래밍 수업을 맡고 있다.

교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.

입력

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

출력

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

 

 

예제입력 예제출력
3
1
4
5
7
9
6
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
8
9
30
6
12
10
20
21
11
7
5
28
4
18
29
17
19
27
13
16
26
14
23
22
15
3
1
24
25
2
8

 

 

⭕ 풀이

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));
        
        Boolean[] submitArr = new Boolean[31];
        Arrays.fill(submitArr, Boolean.FALSE);
        
        submitArr[0] = true;
        for(int i=0;i<28;i++){
            submitArr[Integer.parseInt(br.readLine())] = true;
        }
        br.close();
        
        StringBuilder sb = new StringBuilder();
        for(int i=0;i<submitArr.length;i++){
            if(!submitArr[i]){
                sb.append(i).append("\n");
            }
        }
        System.out.print(sb.toString());
    }
}

 

✅ 총 학생이 30명이지만 0번째 인덱스까지 고려해 31길이의 Boolean배열을 만들고 전체를 false로 채운다.

출석번호는 1번부터이므로 0번째 인덱스에 닿을일이 없어 직접 true로 초기화해준다.

길이를 30으로 두고 sb.append(i+1) 을 해도 되겠지만 뭐가 더 좋다 나쁘다는 없을것같다 가독성, 취향차이이지 않을까

 

이후 입력이 28줄이라고 명시되어있으므로 i<28 까지의 반복문을 돌려

한줄씩 입력받으며 해당 번호의 인덱스를 true로 초기화 시켜준다.

 

이후 30번끝까지 돌수있는 i<submitArr.length 의 반복문안에서 false라면 

즉, 위의 반복문에서 true로 초기화 되지않았다면 -> 제출을 하지않은 출석번호이므로 StringBuilder에 append로  담아 출력한다.

 

 

 

 

 

 

- 출처

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