λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”₯ PS(Problem Solving) πŸ”₯/BOJ

[BOJ] #13458 μ‹œν—˜κ°λ…

by dar0m! 2019. 10. 9.
μ‹œκ°„ μ œν•œ λ©”λͺ¨λ¦¬ μ œν•œ μ •λ‹΅ λΉ„μœ¨
2 초 512 MB 24.464 %

 

 

13458번: μ‹œν—˜ 감독

첫째 쀄에 μ‹œν—˜μž₯의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진닀. λ‘˜μ§Έ μ€„μ—λŠ” 각 μ‹œν—˜μž₯에 μžˆλŠ” μ‘μ‹œμžμ˜ 수 Ai (1 ≤ Ai ≤ 1,000,000)κ°€ 주어진닀. μ…‹μ§Έ μ€„μ—λŠ” B와 Cκ°€ 주어진닀. (1 ≤ B, C ≤ 1,000,000)

www.acmicpc.net

 

ν•΄κ²° 방법

μ‹œν—˜μž₯ μˆ˜μ™€ 각 μ‹œν—˜μž₯λ§ˆλ‹€μ˜ μ‘μ‹œμž μˆ˜κ°€ μž…λ ₯으둜 주어진닀. 주어진 μž…λ ₯듀을 λ°°μ—΄ arr 에 μ €μž₯ν•˜λ©΄, μž„μ˜μ˜ μ‹œν—˜μž₯을 i 번째 μ‹œν—˜μž₯이라고 ν•  λ•Œ i 번째 μ‹œν—˜μž₯의 μ‘μ‹œμž μˆ˜λŠ” arr[i] 이닀. 각 arr[i]에 ν•΄λ‹Ήν•˜λŠ” μ‘μ‹œμž μˆ˜μ— 총 감독은 무쑰건 ν•œ λͺ…λ§Œ μžˆμ–΄μ•Ό ν•˜λ―€λ‘œ 총 감독이 κ°μ‹œν•  수 μžˆλŠ” 인원(B)을 λΊ€ κ°’μœΌλ‘œ arr[i]λ₯Ό κ°±μ‹ ν•˜κ³ (arr[i] = arr[i] - B) arr[i]κ°€ μ–‘μˆ˜λΌλ©΄ λΆ€ 감독관이 κ°μ‹œν•  수 μžˆλŠ” μ‘μ‹œμž 수둜 λ‚˜λˆ  λΆ€ 감독관이 λͺ‡ λͺ…μ΄λ‚˜ ν•„μš” ν•œμ§€ κ΅¬ν•œλ‹€.

λ”°λΌμ„œ 각 μ‹œν—˜μž₯에 λŒ€ν•œ 감독관 μˆ˜λŠ” 총 감독관 ν•œ λͺ…이 + λΆ€ 감독관은 (arr[i] - B) / C λͺ… 만큼 ν•„μš”ν•˜λ‹€. 

 

μ‹œν–‰μ°©μ˜€

총 감독관이 κ°μ‹œν•  수 인원을 λΊ€ κ°’μœΌλ‘œ κ°±μ‹ ν•œ arr[i]κ°€ 음수일 κ²½μš°λ„ μžˆλ‹€λŠ” 것을 κ³ λ €ν•˜μ§€ λͺ»ν–ˆμ—ˆλ‹€. ν•˜μ§€λ§Œ 이유λ₯Ό μ•Œμ•˜μŒμ—λ„ λΆˆκ΅¬ν•˜κ³  μ‹€μˆ˜ν•΄μ„œ 4~5λ²ˆμ„ 더 ν‹€λ Έλ‹€.

 

λ©”λͺ¨λ¦¬ μ‹œκ°„
5020 KB 172 ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<cstdio>
typedef long long int ll;
int n, arr[1000000], B, C;
ll sum;
int main() {
    scanf("%d"&n);
    for (int i = 0; i < n; i++)
        scanf("%d"&arr[i]);
    scanf("%d %d"&B, &C);
    for (int i = 0; i < n; i++) {
        sum += 1// μ΄ κ°λ…κ΄€
        arr[i] -= B;
        if (arr[i] > 0) {
            sum += (arr[i] / C);
            sum += (arr[i] % C) ? 1 : 0;
        }
    }
    printf("%lld", sum);
    return 0;
}
cs

 

λŒ“κΈ€