#38. 백준 번 문제 풀이: 과제 안 내신 분..? 문제 원본 보기
출석번호 1~30번인 학생 30명이 있다. 과제를 28명이 제출했는데, 제출 안한 2명의 출석 번호를 구하시오. 입력: 출석한 학생의 출석번호 목록. 한줄에 하나씩. 출력: 출석하지 않은 학생 2명의 출석번호를 작은 순으로 두줄.
입력/출력
--입력--
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
--출력--
2
8
문제풀이+해설
학생수에 해당하는 배열을 만들어 초기값 0으로 주고, 출석한 학생번호에 해당하는 배열값을 1로 변경한다.
배열에서 값이 0인 인덱스 번호를 출력하면 된다.
배열의 인덱스 번호를 출석번호로 간주하는 것이 중요한 핵심이다.

--
배열[31] = 0으로 초기화 #1~30까지 배열 인덱스를 사용할 것이므로 31개를 선언.
루프 28번
  배열[출석번호] = 1
루프 28번
  if 배열[i] == 0: 미제출 학생번호 출력
--
code sol.
#include <stdio.h>

int main() {
  int i, v;
  int ns[31] = {0}; // 31개의 0값을 가진 배열을 생성
  // 배열 인덱스 번호를 학생번호로 사용. 0은 사용하지 않고 1부터 사용.
  for(i = 0; i < 28; i++) { // 28명 만큼 루프
    scanf("%d", &v); // 수열을 하나씩 입력받는다.
    ns[v] = 1; // 과제를 낸 학생번호에 해당하는 인덱스 배열에 1을 대입
  }
  
  // 배열에서 값이 0인 인덱스가 과제를 내지 않은 학생번호 > 출력   
  for(i = 1; i < 31; i++) { // 1~30까지 인덱스값 확인
    if(ns[i] == 0) printf("%d\n", i); // 과제를 내지 않은 학생번호 출력
  }
  return 0;
}
© 코드솔 - CodeSol. All Rights Reserved.