# 문제
교수님이 내준 특별과제를 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에 대해 들어본 적 없다면 아래의 더보기를 열어 링크해둔 문제를 풀고 오길 권한다.
더보기
- EOF에 관련된 백준 문제
for(int i=1; i<31; i++){
if(submit[i]==0) cout << i << '\n';
}
제출 확인을 마쳤다면, 배열의 값이 여전히 false인 출석 번호를 출력해주면 된다.
이때 배열의 인덱스와 출석번호를 맞추기 위해 배열 크기를 31로 만들었으므로, 제출확인을 체크할 때 인덱스 0번을 제외한 1번부터 확인해야함을 유의하자.
728x90
'백준 > C++' 카테고리의 다른 글
[백준] 10811번: 바구니 뒤집기 | C++ 풀이 (0) | 2023.05.14 |
---|---|
[백준] 3052번: 나머지 | C++ 풀이 (0) | 2023.05.13 |
[백준] 10818번: 최소, 최대 | C++ 풀이 (0) | 2023.05.10 |
[백준] 10871번: X보다 작은 수 | C++ 풀이 (0) | 2023.05.09 |
[백준] 25314번: 코딩은 체육과목 입니다 | C++ 풀이 (0) | 2023.05.08 |