반응형
링크
https://www.acmicpc.net/problem/5597
풀이
교실에 1번부터 30번까지 30명의 학생이 있습니다. 그 중에서 특별과제를 제출한 학생은 28명입니다. 특별과제를 제출한 학생의 출석번호가 입력으로 주어지고 제출 하지 않은 학생 2명의 출석번호를 출력하는 프로그램입니다. 출력은 작은 출석번호부터 해야합니다.
우선 출석번호 하나하나에 대응되는 배열을 만들어줍니다. 반에 30번까지 있으니까 31칸을 가진 int 배열을 만들어줍니다. 그리고 입력을 차례로 받으면서 특별과제를 제출한 학생의 배열값을 1로 바꾸어줍니다. 출석번호를 key로 두고 해싱하는 것입니다. 그렇게 입력을 다 받은 후에 배열[출석번호]의 값이 0인 출석번호의 학생이 특별과제를 제출하지 않았다고 볼 수 있습니다.
출력은 1~30까지 반복문을 돌려 위의 방법으로 확인한 뒤 특별과제를 제출하지 않은 학생의 출석번호를 출력하면 됩니다. 1부터 30까지 반복하기 때문에 자동으로 낮은 출석번호가 먼저 출력됩니다.
코드
//5597_과제 안 내신 분..?
#include <cstdio>
using namespace std;
int student[31];
int main() {
int tmp;
for (int i = 0; i < 28; i++) { // 숙제 한 학생 1, 숙제 안 한 학생 0으로
scanf("%d", &tmp); // 만들어줍니다.
student[tmp] = 1;
}
for (int i = 1; i <= 30; i++) // 1번부터 30번까지 숙제 안 한 인원을
{ // 출력해줍니다.
if (!student[i]) printf("%d\n", i);
}
return 0;
}
반응형
'PS > BOJ' 카테고리의 다른 글
[백준 BOJ] 9086 문자열 (0) | 2022.10.04 |
---|---|
[백준 BOJ] 24262 알고리즘 수업 - 알고리즘의 수행 시간 1 (0) | 2022.10.04 |
[백준 BOJ] 3733 Shares (0) | 2022.09.12 |
[백준 BOJ] 2420 사파리월드 (0) | 2021.03.08 |
[백준 BOJ] 1212 8진수 2진수 (0) | 2021.03.08 |