⌨️CS-PS/백준_수학&구현

[Baekjoon/백준][5597][C/C++] 과제 안 내신 분..?

미르의 블로그 2023. 1. 19. 00:01
728x90
반응형
『목차』
0. 개요

1. 문제
2. 풀이
3. 코드

0. 개요

1차원 배열에 대한 이해만 하면 쉽게 풀리는 문제. 브론즈5 문제라 긴 설명은 필요 없을 듯하다.

1. 문제

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

 

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

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

www.acmicpc.net

[문제]

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

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

[입력]

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

[출력]

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

[예제 입력 1]

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

[예제 출력 1]

2
8

[예제 입력 2]

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]

2
8

2. 풀이

크기가 31인 배열을 선언한다. (인덱스 번호를 30까지 활용하기 위함.)

이후, 배열의 인덱스 값을 학생의 출석번호로 활용하여,

1번 학생은 1번 인덱스, 2번 학생은 2번 인덱스, ... 에 배정한다. (0번 인덱스는 활용하지 않음.)

배열의 기본값을 0=false로 초기화한 후, 출석한 학생의 값을 true로 변경한다.

이렇게 하면, 값이 false로 남아있는 index가 출석을 하지 않은 학생의 번호가 된다.

3. 코드

#pragma warning (disable:4996)
#include <stdio.h>
#include <stdbool.h>

int main(int argc, char* argv[]) {
	bool flag[31] = {}; //0=false로 초기화

	for (int i = 0; i < 28; i++) {
		int tmp; scanf("%d", &tmp);
		flag[tmp] = true; 
	}
	/* 입력값에 해당하는 인덱스의 값을 true로 변경. */

	for (int i = 1; i <= 30; i++)
		if (flag[i] == false)
			printf("%d\n", i);
	/* 입력되지 않은 값은 여전히 false로 남아있다. */

	return 0;
}
728x90
반응형