profile image

L o a d i n g . . .

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


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        boolean[] checkStudent = new boolean[31];

        for (int submit = 0; submit < 28; submit++) {
            checkStudent[scanner.nextInt()] = true;
        }

        for (int notSubmit = 1; notSubmit <= 30; notSubmit++) {
            if (!checkStudent[notSubmit]) {
                System.out.println(notSubmit);
            }
        }
    }
}

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        boolean[] checkStudent = new boolean[31];

과제 제출한 학생들의 번호를 받기 위한 배열인 checkStudent를 선언합니다.

boolean형 배열은 선언 시 false로 초기화 됩니다.

출석을 1부터 세므로 1~30이 필요합니다. 따라서 31 크기 배열로 선언합니다.

 

        for (int submit = 0; submit < 28; submit++) {
            checkStudent[scanner.nextInt()] = true;
        }

제출한 학생들의 번호를 입력하면서 해당 위치 배열 값은 true 로 지정합니다.

 

        for (int notSubmit = 1; notSubmit <= 30; notSubmit++) {
            if (!checkStudent[notSubmit]) {
                System.out.println(notSubmit);
            }
        }

notSubmit이 1부터 시작하는 이유는 출석을 1번부터 세기 때문입니다.

0번 배열을 버린 것이므로 배열의 크기도 31로 선언했습니다.

 

제출하지 않은 학생의 경우, if (!checkStudent[notSubmi]) 에서 걸리게 됩니다. 기본이 false, 과제를 낸 학생은 true 입니다 과제를 낸 학생이 if문에 들어가게 되면 !ture, 즉 false가 되므로 if문을 실행하지 않습니다. 과제를 내지 않은 학생이 if문에 들어가게 되면 !false, 즉 true가 되므로 if문을 실행합니다.

참고

1. https://hellodoor.tistory.com/234

복사했습니다!