1. 문제 상세
https://www.acmicpc.net/problem/5597
2. 문제 접근
30명의 학생 중 과제를 내지 않은 학생을 찾자.
1~30까지의 수 중 28개만을 입력받고, 이 중 입력받지 않은 값을 찾아서 작은 순서대로 출력해야 한다.
크기가 30인 Bool(부울 형식, 참(1)과 거짓(0) 중 하나의 값을 가진다) 형식 배열을 선언한다.
반복문으로 출석번호를 28번 입력받으며 배열에서 입력받은 출석번호-1 인덱스의 값을 true로 바꿔 해당 출석번호의 학생이 과제를 제출했다는 것을 확인해둔다.
위 반복문이 끝나면 배열의 값들을 처음부터 끝까지 확인하며 값이 false인 경우 해당 인덱스에 1을 더해 출력한다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int num;
bool a[30] = {false};
for(int i = 0; i < 28; i++) {
cin >> num;
a[num - 1] = true;
}
for(int i = 0; i < 30; i++) if(a[i] == false) cout << i + 1 << " ";
}
정수형 변수 num을 선언. 크기가 30인 bool형 배열 a를 선언하고 모든 값을 false 로 초기화한다.
for문으로 i가 0부터 28보다 작을 때 1씩 더하며 반복하도록 한다.반복에서는 cin으로 출석번호를 입력받아 num에 저장하고, 배열 a의 num-1번 인덱스의 값을 true 로 바꾼다.
위 반복문이 끝나면 for문으로 i가 0부터 30보다 작을 때 1씩 더하며 반복하도록 한다.반복에서는 if문으로 배열 a의 i번 인덱스의 값이 false인 경우 cout으로 i+1의 값을 출력하도록 한다.
4. 성능 확인
5. 마무리
기존에 정수형 배열만 사용했었는데 이번에는 참,거짓 값을 가지는 bool 형 변수를 저장하는 bool 형식의 배열을 사용해 보았다.
bool 형식의 배열은 선언 시 모든 값이 기본으로 false값을 가진다고 한다.
'백준 - 단계별로 풀어보기 > 1차원 배열' 카테고리의 다른 글
[백준] 1546번 : 평균 | C++ (0) | 2023.09.22 |
---|---|
[백준] 10811번 : 바구니 뒤집기 | C++ (0) | 2023.09.22 |
[백준] 10813번 : 공 바꾸기 | C++ (0) | 2023.09.21 |
[백준] 10810번 : 공 넣기 | C++ (0) | 2023.09.21 |
[백준] 2562번 : 최댓값 | C++ (0) | 2023.09.21 |