DINGA DINGA
728x90

www.acmicpc.net/problem/5597

 

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

입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)을 하나씩 입력합니다. 입력한 출석번호에 중복은 없으며, 순서에 상관없이 입력받을 수 있어야 합니다.

www.acmicpc.net

 

코드

#include <stdio.h>

main() {
	int check[30] = { 0, };		//과제 제출한 학생을 체크하는 배열
	for (int i = 0; i < 28; i++) {	//과제 제출한 학생 체크
		int n;
		scanf("%d", &n);
		check[n - 1] = 1;
	}
	for (int i = 0; i < 30; i++)	//과제 미제출 학생 출석번호 출력
		if (check[i] == 0)
			printf("%d\n", i + 1);
}

 

설명

 

check 배열은 과제를 제출한 학생의 출석번호를 체크하는 배열로, 배열의 모든 값을 0으로 초기화했다.

첫 번째 for문에서는 과제를 제출한 학생의 출석번호를 28개 입력받고, check에서 해당 번호-1 인덱스의 값을 1로 저장한다. 이때 check[n]이 아니라 check[n-1]의 값을 바꾸는 것은 배열의 인덱스가 1부터가 아닌 0부터 시작하는 것을 고려한 것이다.

두 번째 for문에서는 우선 check배열의 0번째부터 29번째까지 비교한다. 값이 0이면 과제를 제출하지 않은 것이므로 i+1을 출력한다. 이는 마찬가지로 배열의 인덱스가 0~29까지이기 때문이다.

728x90

'C & C++ > BOJ' 카테고리의 다른 글

[백준] 1712번: 손익분기점  (0) 2021.03.12
[백준] 1037번: 약수  (0) 2021.03.12
[백준] 3046번: R2  (0) 2021.03.12
[백준] 2798번: 블랙잭  (0) 2021.03.11
[백준] 10809번: 알파벳 찾기  (0) 2021.03.04