[백준 BOJ] 13458번 시험 감독 (C++/cpp)

2022. 12. 2. 15:35PS (Program Solving)/BOJ (백준)

문제 설명

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

 

13458번: 시험 감독

첫째 줄에 시험장의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 각 시험장에 있는 응시자의 수 Ai (1 ≤ Ai ≤ 1,000,000)가 주어진다. 셋째 줄에는 B와 C가 주어진다. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

백준 BOJ 13458번 시험 감독 문제 사진1
백준 BOJ 13458번 시험 감독 문제 사진2

 

접근 방법 - 사칙연산의 응용문제

백준의 13458번 문제는 사칙연산에 있어 다소 심화적인 부분을 다루고 있는 문제이다.

해당 문제는, 시험장 및 응시생 수, 총감독관 및 부감독관이 감시할 수 있는 인원이 정해져 있을 때 필요한 감독관의 최소 수를 출력해야 하는 문제이다.

이때, 총감독관은 1명만 배정해야 하며 부감독관은 여러 명이어도 상관없다는 조건이 문제에 있다.

따라서, 총감독관만으로 감시가 불가능한 시험장은 하나 또는 여러 부감독관을 추가로 배정해야 하며 그만큼 감독관 수를 늘려서 책정하면 된다.

자세한 설명은 아래에 기재하니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 설명과 코드를 참고해보길 바란다.

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

 

코드의 실행 순서

1) 각 시험장의 응시자 수를 저장할 배열(num)을 전역 변수로 미리 선언해둔다.

 

2) 시험장 수(n)와 각 시험장의 응시자 수(num)를 입력받는다.

연이어, 총감독관이 감시 가능한 인원(main)과 부감독관이 감시 가능한 인원(sub)을 입력받는다.

 

3) 필요한 감독관의 수를 측정하기 위한 변수 cnt를 0으로 초기화하여 선언한다.

(이때, 입력값의 범위를 보았을 때 cnt의 값이 일반적인 int형 범위를 넘어설 수도 있기 때문에 long long int형으로 선언하도록 한다.)

 

4) n의 크기만큼, 반복문을 실행하여 아래의 연산을 수행한다.

- num의 현재 탐색값에 대하여, main의 값을 뺀 뒤 cnt에 1을 더한다.

(해당 총감독관을 감독관의 수에 포함하면서, 총감독관이 감시 가능한 인원을 해당 시험장의 응시자 수에서 빼보았다.)

- num의 현재 탐색값이 sub로 나누어 떨어진다면, 나누어지는 몫만큼 cnt에 더한다.

다만 나누어 떨어지지 않는다면, 나누어지는 몫에 1을 더한 만큼 cnt에 더한다.

(부감독관을 감독관의 수에 포함시키는데, 나누어 떨어지지 않는 경우에는 여유롭게 1명이 더 필요하기 때문에 이렇게 연산하였다.)

 

5) 연산이 완료되었다면, 최종적으로 저장된 cnt의 값을 출력한 뒤 실행 종료한다.

반응형

 

성공한 코드

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

//백준 13458번 코드
int num[1000001];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);

	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	int main, sub;
	cin >> main >> sub;

	long long int cnt = 0;
	for (int i = 0; i < n; i++) {
		num[i] -= main;	cnt++;
		if (num[i] < 0) { continue; }
		if (num[i] % sub == 0) {
			cnt += num[i] / sub;
		}
		else {
			cnt += num[i] / sub + 1;
		}
	}
	cout << cnt << endl;
}

 

제출 결과

백준 BOJ 13458번 시험 감독 문제 C++ 제출 결과

(2022.06.15 백준 13458번 문제 제출 결과)

반응형