λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
✨ Algorithm

[λ°±μ€€/C++] 13458번 : μ‹œν—˜ 감독

by nitronium102 2021. 8. 30.

문제

총 N개의 μ‹œν—˜μž₯이 있고, 각각의 μ‹œν—˜μž₯λ§ˆλ‹€ μ‘μ‹œμžλ“€μ΄ μžˆλ‹€. i번 μ‹œν—˜μž₯에 μžˆλŠ” μ‘μ‹œμžμ˜ μˆ˜λŠ” Aiλͺ…이닀.

감독관은 총감독관과 λΆ€κ°λ…κ΄€μœΌλ‘œ 두 μ’…λ₯˜κ°€ μžˆλ‹€. 총감독관은 ν•œ μ‹œν—˜μž₯μ—μ„œ κ°μ‹œν•  수 μžˆλŠ” μ‘μ‹œμžμ˜ μˆ˜κ°€ Bλͺ…이고, 뢀감독관은 ν•œ μ‹œν—˜μž₯μ—μ„œ κ°μ‹œν•  수 μžˆλŠ” μ‘μ‹œμžμ˜ μˆ˜κ°€ Cλͺ…이닀.

각각의 μ‹œν—˜μž₯에 총감독관은 였직 1λͺ…λ§Œ μžˆμ–΄μ•Ό ν•˜κ³ , 뢀감독관은 μ—¬λŸ¬ λͺ… μžˆμ–΄λ„ λœλ‹€.

각 μ‹œν—˜μž₯λ§ˆλ‹€ μ‘μ‹œμƒλ“€μ„ λͺ¨λ‘ κ°μ‹œν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ, ν•„μš”ν•œ 감독관 수의 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μž…λ ₯

첫째 쀄에 μ‹œν—˜μž₯의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진닀.

λ‘˜μ§Έ μ€„μ—λŠ” 각 μ‹œν—˜μž₯에 μžˆλŠ” μ‘μ‹œμžμ˜ 수 Ai (1 ≤ Ai ≤ 1,000,000)κ°€ 주어진닀.

μ…‹μ§Έ μ€„μ—λŠ” B와 Cκ°€ 주어진닀. (1 ≤ B, C ≤ 1,000,000)

좜λ ₯

각 μ‹œν—˜μž₯λ§ˆλ‹€ μ‘μ‹œμƒμ„ λͺ¨λ‘ κ°λ…ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ κ°λ…κ΄€μ˜ μ΅œμ†Œ 수λ₯Ό 좜λ ₯ν•œλ‹€.

풀이

01. μžλ£Œν˜• λ²”μœ„ 주의 : (총감독관 1 + 뢀감독관 1,000,000) * μ‘μ‹œμž 수 1,000,000 = 1μ‘° 초과

int의 μ΅œλŒ€κ°’μ€  2147483647둜 μ•½ 20얡이닀. λ”°λΌμ„œ, intν˜•μ˜ λ²”μœ„λ₯Ό μ΄ˆκ³Όν•˜κΈ° λ•Œλ¬Έμ— μ΅œλŒ€ λ²”μœ„κ°€ 9백경인 long long을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

 

02. 뢀감독관이 λ“€μ–΄κ°€λŠ” 경우

μ£Όκ°λ…κ΄€μœΌλ‘œ κ°μ‹œν•œ ν›„, 뢀감독관이 κ°μ‹œν•  인원이 남은 경우!

 

// μ‹œν—˜κ°λ…
#include <iostream>
#define MAX 1000001
using namespace std;
int A[MAX];

long long solution(int A[], int B, int C, int N){
  long long answer = 0;
  for (int i=0; i<N; i++){
    A[i] -= B;
    answer++;

    if (A[i] > 0){
      answer += A[i]/C;
      if (A[i]%C != 0)
        answer += 1;
    }
  }
  return answer;
}

int main() {
  int N, B, C;
  cin >> N;
  for (int i=0; i<N; i++){
    cin >> A[i];
  }
  cin >> B >> C;
  cout << solution(A, B, C, N);
}

λŒ“κΈ€