PS/BOJ

[백준 BOJ] 5597 과제 안 내신 분..?

Jubil 2022. 9. 12. 14:57
반응형

링크

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

 

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

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

www.acmicpc.net

풀이

5597 과제 안 내신 분..?

 

교실에 1번부터 30번까지 30명의 학생이 있습니다. 그 중에서 특별과제를 제출한 학생은 28명입니다. 특별과제를 제출한 학생의 출석번호가 입력으로 주어지고 제출 하지 않은 학생 2명의 출석번호를 출력하는 프로그램입니다. 출력은 작은 출석번호부터 해야합니다.

 

우선 출석번호 하나하나에 대응되는 배열을 만들어줍니다. 반에 30번까지 있으니까 31칸을 가진 int 배열을 만들어줍니다. 그리고 입력을 차례로 받으면서 특별과제를 제출한 학생의 배열값을 1로 바꾸어줍니다. 출석번호를 key로 두고 해싱하는 것입니다. 그렇게 입력을 다 받은 후에 배열[출석번호]의 값이 0인 출석번호의 학생이 특별과제를 제출하지 않았다고 볼 수 있습니다.

 

출력은 1~30까지 반복문을 돌려 위의 방법으로 확인한 뒤 특별과제를 제출하지 않은 학생의 출석번호를 출력하면 됩니다. 1부터 30까지 반복하기 때문에 자동으로 낮은 출석번호가 먼저 출력됩니다.

 

코드

//5597_과제 안 내신 분..?
#include <cstdio>
using namespace std;

int student[31];	

int main() {
	int tmp;

	for (int i = 0; i < 28; i++) {		// 숙제 한 학생 1, 숙제 안 한 학생 0으로
		scanf("%d", &tmp);		// 만들어줍니다.
		student[tmp] = 1;
	}

	for (int i = 1; i <= 30; i++)		// 1번부터 30번까지 숙제 안 한 인원을
	{					// 출력해줍니다.
		if (!student[i]) printf("%d\n", i);
	}

	return 0;
}

반응형