본문 바로가기

c++/Baekjoon Online

백준 13458 : 시험 감독 c++

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

 

엄청 얕봤다가 은근히 고생한 문제...

1. result를 long long으로 안둬서 범위초과로 틀리고

2. 아무생각없이 while문 썼다가 시간초과 뜨꼬..

3. 이런 간단한 문제들도 쫌 다시 풀기 시작해야겠다

4. 난 아직 멀었다

 

- 처음에 푼 방식

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int map[1000000];
int main()
{
	int n;
	int b, c;
	cin >> n;
	long long answer = n;
	for (int i = 0; i < n; i++)
	{
		cin >> map[i];
	}
	cin >> b >> c;


	for (int i = 0; i < n; i++)
	{
		map[i] -= b;
		if (map[i] > 0)
		{
			int first = map[i];
			while (map[i] % c != 0)//나누어 떨어질때 까지
			{
				map[i]--;
			}
			if (first == map[i])
				answer += map[i] / c;
			else
				answer += (map[i] / c + 1);

		}
	}

	cout << answer<<endl;
	return 0;
}

 

 

2. 시간초과때문에 다시 풀기

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int map[1000000];
int main()
{
	int n;
	int b, c;
	cin >> n;
	long long answer = n;
	for (int i = 0; i < n; i++)
	{
		cin >> map[i];
	}
	cin >> b >> c;


	for (int i = 0; i < n; i++)
	{
		map[i] -= b;
		if (map[i] > 0)
		{
			if (map[i] % c == 0)
				answer += map[i] / c;
			else
				answer += map[i] / c + 1;

		}
	}

	cout << answer<<endl;
	return 0;
}

 

'c++ > Baekjoon Online' 카테고리의 다른 글

백준 9205 : 맥주마시면서 걸어가기 c++  (0) 2020.09.06
백준 15684 : 사다리 조작 C++  (0) 2020.09.06
백준 10836: 여왕벌 C++  (0) 2020.09.06
백준 10040: 투표 c++  (0) 2020.09.06
백준 1713: 후보 추천하기 c++  (0) 2020.09.06