시험장마다 한 명의 총감독관과 여러 명의 부감독관이 있을 수 있을 때, 응시생을 모두 감시하는 데에 필요한 최소 감독관 수를 구하는 간단한 연산 문제이다.
주의할 점
1. 빼기의 반복은 나누기이다.
2. 최대범위를 고려하여 데이터타입을 정하자.
#include <iostream>
#include <cstdio>
#define MAX 1000000
using namespace std;
int N, B, C;
int p[MAX];
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int x = 0;
long long sum = 0;
cin >> N;
for (int i = 0; i < N; i++) {
cin >> p[i];
}
cin >> B >> C;
for (int i = 0; i < N; i++) {
sum++;
p[i] -= B;
if (p[i] > 0) {
sum += ((p[i] - 1) / C + 1);
}
}
cout << sum;
}
디버깅 기록
1. 필요한 총감독관의 수를 구할 때는 굳이 p[i]값이 0인지 확인할 필요가 없다. 어차피 조건에서 최소 응시생 범위는 1이기 때문. 그리고 총감독관은 꼭 1명이 있어야 하므로 먼저 따로 계산을 해주었다.
2. 필요한 부감독관의 수를 구할 대, 처음에 p[i] / C + 1 의 값을 sum에 더해서, p[i]가 나누어 떨어지는 경우에 잘못된 값이 출력되었다. 저번에 익혔던 스킬을 떠올려서, 기존 값에서 1을 빼고 나눈 후 몫값에 1을 더해주는 위의 식으로 바꾸었다.
3. 최대범위를 고려 안 하고 sum도 int형으로 설정했다가 틀렸다고 나와서 long long으로 수정하였다. 최대범위는 항상 조심 또 조심..
* 처음에는 벡터를 사용했는데 다른 사람 코드에 비해 메모리도 많이 쓰고 시간도 오래 걸려서 배열로 바꾼 후에 cin,cout 속도도 줄이니 비슷한 성능이 나왔다.
'STUDY > 코딩테스트 연습(PS)' 카테고리의 다른 글
프로그래머스 level 2 '124 나라의 숫자' C++ 풀이 과정 및 코드 (0) | 2021.04.25 |
---|---|
백준/1620번, 포켓몬 마스터/C++ (0) | 2021.04.24 |
프로그래머스/H-Index(정렬)/C++ ; 정렬 없이 풀기, 정렬하여 풀기 (0) | 2021.04.16 |
프로그래머스/큰 수 만들기(Greedy)/C++ (0) | 2021.04.13 |
프로그래머스/크레인 인형뽑기 게임/2019 카카오 개발자 겨울 인턴십/C++ (0) | 2021.04.09 |