별의 공부 블로그 🧑🏻‍💻
728x90
728x170

문제

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

 


출처

Olympiad > 일본정보올림피아드 예선 > JOI 2007 예선 2번

· 문제를 번역한 사람: egpaltair

 

 

알고리즘 분류

· 구현

 

 

코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <vector>
using namespace std;
 
#define N 29
#define L 31
 
int main() {
    int min, num[N];
    bool check[L] = { false };
    vector <int> index;
    
    for (int i = 0; i < 28; i++) {
        cin >> num[i];
        check[num[i]] = true;
    }
    
    for (int i = 1; i <= 30; i++) {
        if (check[i] == false) {
            index.push_back(i);
        }
    }
    
    cout << index.at(0<< endl << index.at(1);
    
    
    return 0;
}





이 문제를 해결하기 위해 구상했던 방법은 아래와 같다.


1. 우선 입력 받은 28개의 숫자를 크기가 29인 num 배열에 담는다.

2. 0부터 31까지의 인덱스를 갖고 있는 boolean 형식의 배열 check를 선언한다. 이 때, 안의 요소들은 false값으로 초기화한다.

3. 인덱스 0부터 27까지 배열 num의 내용을 순회하면서 해당 요소의 값을 인덱스로 한 배열 check의 값을 true로 바꾸어 준다.

4. check 배열에는 1부터 30까지의 숫자 중, 사용자로부터 입력 받은 요소일 경우, 해당 요소를 인덱스로 갖는 위치에 있는 값이 true, 입력 받지 않은 값을 인덱스로 갖는 위치에 있는 값이 false가 된다.

5. 1부터 31까지 순회를 하면서 check 배열에 있는 값 중, false 값이 담긴 인덱스를 벡터 index에 넣어준다.

   벡터 index에는 1부터 30까지의 숫자 중, 사용자로부터 입력 받지 않은 값이 오름차순 순으로 담기게 된다.

6. 최종적으로 벡터 index의 첫번째 요소의 값과 두번째 요소의 값을 각각 출력한다.


이 문제 역시 배열과 벡터의 인덱스 및 요소 값의 위치 관계를 고려하여 풀었다.


728x90
그리드형(광고전용)

'Problem Solving > BaekJoon Online Judge' 카테고리의 다른 글

[BOJ2884][C++] 알람 시계  (0) 2018.10.03
[BOJ5063][C++] TGN  (0) 2018.10.03
[BOJ2822][C++] 점수 계산  (0) 2018.10.03
[BOJ10707][C++] 수도요금  (0) 2018.10.03
[BOJ5543][C++] 상근날드  (0) 2018.10.01
[BOJ2490][C++] 윷놀이  (0) 2018.10.01
[BOJ12791][C++] Starman  (0) 2018.10.01
[BOJ7567][C++] 그릇  (0) 2018.09.29
⚠️AdBlock이 감지되었습니다. 원할한 페이지 표시를 위해 AdBlock을 꺼주세요.⚠️
starrykss
starrykss
별의 공부 블로그 🧑🏻‍💻


📖 Contents 📖