백준/C++

[백준] 5597번: 과제 안 내신 분..? | C++ 풀이

성실한 당근농부 2023. 5. 12. 23:59

# 문제

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

 

 


 

# 풀이

bool 타입을 활용해주면 쉽게 풀 수 있는 문제다. 당황하지 말고 풀어보자.

정답 소스코드부터 확인!

 

#include <iostream>
using namespace std;

int main(){
    bool submit[31] = {0}; // 제출 확인 배열 default: false
    int num;

    while(cin >> num){
        submit[num] = 1; // 제출한 학생 true
    }

    for(int i=1; i<31; i++){
        if(submit[i] == 0) cout << i << '\n';
    }

    return 0;
}

 

이 문제에서의 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 중복은 없기 때문에 1~30번이 들어갈 수 있는 제출 확인 배열을 bool 타입으로 만들어주었다. 주석에도 적어둔 것처럼 default 값을 false로 설정해주고, 출석번호가 확인되면 true로 변경해준다.

 

 

 

while(cin >> num){
    submit[num] = 1; // 제출한 학생 true
}

 

여기서 출석번호를 확인하는 것은 EOF를 활용하여 간결하게 코드를 구성해보았다. (만약 같은 문제더라도 t개의 테스트 케이스가 주어진다면 정직하게 반복문을 통해 풀면 된다) EOF에 대해 들어본 적 없다면 아래의 더보기를 열어 링크해둔 문제를 풀고 오길 권한다.

 

 

for(int i=1; i<31; i++){
    if(submit[i]==0) cout << i << '\n';
}

 

제출 확인을 마쳤다면, 배열의 값이 여전히 false인 출석 번호를 출력해주면 된다.

이때 배열의 인덱스와 출석번호를 맞추기 위해 배열 크기를 31로 만들었으므로, 제출확인을 체크할 때 인덱스 0번을 제외한 1번부터 확인해야함을 유의하자.

 

 

 

 


 

 

 

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

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

www.acmicpc.net

 

728x90