C & C++/BOJ
[백준] 5597번: 과제 안 내신 분..?
와금
2021. 3. 12. 00:59
728x90
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