[백준 BOJ] 5597번 과제 안 내신 분..? (C++/cpp)

2022. 2. 27. 18:19PS (Program Solving)/BOJ (백준)

문제 설명

https://www.acmicpc.net/problem/5597

 

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

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

www.acmicpc.net

백준 BOJ 5597번 과제 안 내신 분..? 문제 사진
백준 BOJ 5597번 과제 안 내신 분..? 문제 사진2

 

접근 방법 - 배열을 이용한 간단한 연산

백준의 5597번 문제는 배열을 이용한 간단한 연산 문제이다.

해당 문제는, 28명의 제출자 출석 번호를 입력받으며 제출하지 않은 2명의 출석 번호를 출력해야 하는 문제이다.

필자는 앞에서도 작성하였다시피, 배열을 이용하여 이 문제를 해결하였다.

받는 입력값에 대응하는 배열값에 1을 더하면서 입력을 전부 받은 뒤, 최종적으로 배열값이 0인 2개의 번호를 출력하는 원리를 이용하였다.

더 자세한 설명은 아래에서 하고자 한다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 크기가 30인 배열(arr)을 전역 변수로 선언한다.

(이렇게 하면, 모든 배열값이 0으로 초기화되면서 선언된다.)

 

2) 28개의 출석 번호를 입력받으면서 아래의 연산을 취한다.

- 입력받은 값에 1을 뺀 값을 배열 번호로 갖는 배열값에 1을 더하도록 한다.

(여기서, 배열의 번호는 0부터 시작하기 때문에 1을 빼는 연산을 취하였다.)

 

3) 입력에 대한 모든 연산이 끝났다면, 배열값 전체를 탐색하며 아래의 연산을 취한다.

- 만약 탐색한 값이 0이라면 해당 배열 번호에 1을 더한 뒤 출력한다. (2번 과정에서 1을 뺐기 때문에 출력할 땐 다시 더한다.)

 

4) 2개의 숫자에 대한 출력이 모두 끝났다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
using namespace std;

//백준 5597번 코드
int arr[30];
int main() {
	int a;
	for (int i = 0; i < 28; i++) {
		cin >> a;
		arr[a - 1]++;
	}

	for (int i = 0; i < 30; i++) {
		if (arr[i] == 0) {
			cout << i + 1 << endl;
		}
	}
}

 

제출 결과

백준 BOJ 5597번 과제 안 내신 분..? 문제 C++ 제출 결과

(2022.02.19 백준 5597번 문제 제출 결과)

반응형