본문 바로가기

백준 알고리즘

백준 [5597] 과제 안 내신 분..? - 자바 풀이

반응형

 

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

 

5597번: 과제 안 내신 분..?

X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다. 교수님이 내준 특별과제를 28명이 제출했는데,

www.acmicpc.net


 

 

 

아무리 생각해도 해결이 되지 않았다. 

알고보니 boolean을 사용하면 생각보다 쉽게 해결된다.

 

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		boolean[] arr = new boolean[31];
		
		for(int i=0; i<28;i++) {
			arr[sc.nextInt()] = true;
		}
		
		for(int i=1; i<=30;i++) {
			if(!arr[i]) {
				System.out.println(i);
			}
		}
	}
}

순서대로 들여다 보자.

 

boolean[] arr = new boolean[31];
		
for(int i=0; i<28;i++) {
	arr[sc.nextInt()] = true;
}

arr배열을 평소와 다르게 int가 아닌 boolean으로 적는다. 

boolean[31]을 입력해 31크기의 배열을 선언한다.

boolean형 배열로 만들어 배열이 true이면 과제를 제출한 것이고, false이면 과제를 제출하지 않은 것이다.

for문을 사용해  arr[] 배열 안에 값을 입력하고, 입력된 인덱스를 true로 바꾼다. 

 

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

for문과 if문을 사용해 arr[ ] 값에 1~30까지의 수를 넣었을 때 arr[ ]에 존재하지 않는 i는 false로,

System.out.println()을 사용해 한 줄에 하나씩 출력한다.

 

반응형