Hello Ocean! ๐ŸŒผ

[C++/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์•ผ๊ทผ ์ง€์ˆ˜ ๋ณธ๋ฌธ

Algorithm

[C++/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์•ผ๊ทผ ์ง€์ˆ˜

bba_dda 2022. 4. 5. 21:55
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/12927#

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์•ผ๊ทผ ์ง€์ˆ˜

ํšŒ์‚ฌ์› Demi๋Š” ๊ฐ€๋”์€ ์•ผ๊ทผ์„ ํ•˜๋Š”๋ฐ์š”, ์•ผ๊ทผ์„ ํ•˜๋ฉด ์•ผ๊ทผ ํ”ผ๋กœ๋„๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค. ์•ผ๊ทผ ํ”ผ๋กœ๋„๋Š” ์•ผ๊ทผ์„ ์‹œ์ž‘ํ•œ ์‹œ์ ์—์„œ ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์„ ์ œ๊ณฑํ•˜์—ฌ ๋”ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. Demi๋Š” N์‹œ๊ฐ„ ๋™์•ˆ ์•ผ๊ทผ ํ”ผ๋กœ๋„

programmers.co.kr

 

 

ํšŒ์‚ฌ์› Demi๋Š” ๊ฐ€๋”์€ ์•ผ๊ทผ์„ ํ•˜๋Š”๋ฐ์š”, ์•ผ๊ทผ์„ ํ•˜๋ฉด ์•ผ๊ทผ ํ”ผ๋กœ๋„๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค.

์•ผ๊ทผ ํ”ผ๋กœ๋„๋Š” ์•ผ๊ทผ์„ ์‹œ์ž‘ํ•œ ์‹œ์ ์—์„œ ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์„ ์ œ๊ณฑํ•˜์—ฌ ๋”ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค.

Demi๋Š” N์‹œ๊ฐ„ ๋™์•ˆ ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋„๋ก ์ผํ•  ๊ฒ๋‹ˆ๋‹ค.

Demi๊ฐ€ 1์‹œ๊ฐ„ ๋™์•ˆ ์ž‘์—…๋Ÿ‰ 1๋งŒํผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ,

ํ‡ด๊ทผ๊นŒ์ง€ ๋‚จ์€ N ์‹œ๊ฐ„๊ณผ ๊ฐ ์ผ์— ๋Œ€ํ•œ ์ž‘์—…๋Ÿ‰ works์— ๋Œ€ํ•ด ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์‚ฌํ•ญ
  • works๋Š” ๊ธธ์ด 1 ์ด์ƒ, 20,000 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • works์˜ ์›์†Œ๋Š” 50000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • n์€ 1,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ
works n result
[4, 3, 3] 4 12
[2, 1, 2] 1 6

์ž…์ถœ๋ ฅ ์˜ˆ #1
n=4 ์ผ ๋•Œ, ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์ด [4, 3, 3] ์ด๋ผ๋ฉด ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด 4์‹œ๊ฐ„๋™์•ˆ ์ผ์„ ํ•œ ๊ฒฐ๊ณผ๋Š” [2, 2, 2]์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ ์•ผ๊ทผ ์ง€์ˆ˜๋Š” 22 + 22 + 22 = 12 ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
n=1์ผ ๋•Œ, ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์ด [2,1,2]๋ผ๋ฉด ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด 1์‹œ๊ฐ„๋™์•ˆ ์ผ์„ ํ•œ ๊ฒฐ๊ณผ๋Š” [1,1,2]์ž…๋‹ˆ๋‹ค.

์•ผ๊ทผ์ง€์ˆ˜๋Š” 12 + 12 + 22 = 6์ž…๋‹ˆ๋‹ค.

ํ’€์ด

์•ผ๊ทผ์ง€์ˆ˜๋ฅผ ๋‚จ์€ ์ผ๋“ค์˜ ์ž‘์—…๋Ÿ‰์˜ ์ œ๊ณฑ์ˆ˜๋ฅผ ๋”ํ•ด์„œ ๊ตฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋“ค์˜ ์ž‘์—…๋Ÿ‰์„ ์ตœ๋Œ€ํ•œ ๊ณ ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. (๊ฐ€์žฅ ์ž‘์€ ์ตœ๋Œ“๊ฐ’์ด ๋˜๋„๋ก n์‹œ๊ฐ„ ๋ถ„๋ฐฐํ•˜๊ธฐ)

ex) works = [8,8,9] / n = 3์ผ ๋•Œ, [8,8,6]์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ณด๋‹ค [8,7,7]๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ์•ผ๊ทผ์ง€์ˆ˜๊ฐ€ ์ž‘๋‹ค. 

 

๋”ฐ๋ผ์„œ, works๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  idx = 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ๊นŽ์•„๋‚˜๊ฐ„๋‹ค๋Š” ๋Š๋‚Œ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค.

๊ฐ ๋‹จ๊ณ„์—์„œ ํŒŒ๋ž€์ƒ‰ ๋ถ€๋ถ„(๊นŽ์•„์•ผ ํ•  ๋ถ€๋ถ„)์ด ๋‚จ์•„์žˆ๋Š” n๋ณด๋‹ค ํฌ๋ฉด ๊นŽ๊ณ  max_idx++,

์ž‘์œผ๋ฉด ๊นŽ์„ ์ˆ˜ ์žˆ์„ ๋งŒํผ๋งŒ ์ตœ๋Œ€ํ•œ ๊นŽ๊ณ  ๋‚จ์€ works๋กœ ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค. 

 

์ฝ”๋“œ

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

long long solution(int n, vector<int> works) {
    sort(works.begin(), works.end(), greater<int>());
    long long answer = 0;
    int max_idx = 0;
    int h;
    
    // 5 * 10^4
    while (max_idx < works.size() - 1) {
        while (max_idx < works.size() - 2 && works[max_idx] == works[max_idx+1]) {
            max_idx++;
        }
        h = works[max_idx] - works[max_idx+1];
        if ((max_idx+1)*h > n) break;
        n -= (max_idx+1)*h;
        max_idx++;
    }
    int val = works[max_idx];
    
    if ((max_idx+1)*val <= n) return 0;

    val -= n/(max_idx+1);
    n -= n/(max_idx+1) * (max_idx+1);
    
    answer += (long long)val*(long long)val*(long long)(max_idx+1-n);
    answer += (long long)(val-1)*(long long)(val-1)*(long long)n;
    
    // 5 * 10^4
    for (int i = max_idx+1;i<works.size();i++) {
        answer += (long long)(works[i]*works[i]);
    }
    return answer;
}

๊ฒฐ๊ณผ

์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰ ํ†ต๊ณผ (0.01ms, 3.48MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.11MB)
ํ…Œ์ŠคํŠธ 3 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.09MB)
ํ…Œ์ŠคํŠธ 4 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.18MB)
ํ…Œ์ŠคํŠธ 5 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.17MB)
ํ…Œ์ŠคํŠธ 6 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.17MB)
ํ…Œ์ŠคํŠธ 7 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.16MB)
ํ…Œ์ŠคํŠธ 8 ใ€‰ ํ†ต๊ณผ (0.02ms, 4.09MB)
ํ…Œ์ŠคํŠธ 9 ใ€‰ ํ†ต๊ณผ (0.03ms, 4.09MB)
ํ…Œ์ŠคํŠธ 10 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.09MB)
ํ…Œ์ŠคํŠธ 11 ใ€‰ ํ†ต๊ณผ (0.01ms, 3.58MB)
ํ…Œ์ŠคํŠธ 12 ใ€‰ ํ†ต๊ณผ (0.01ms, 4.18MB)
ํ…Œ์ŠคํŠธ 13 ใ€‰ ํ†ต๊ณผ (0.01ms, 3.64MB)
ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ
ํ…Œ์ŠคํŠธ 1 ใ€‰ ํ†ต๊ณผ (0.10ms, 3.78MB)
ํ…Œ์ŠคํŠธ 2 ใ€‰ ํ†ต๊ณผ (0.09ms, 3.85MB)
์ฑ„์  ๊ฒฐ๊ณผ
์ •ํ™•์„ฑ: 86.7
ํšจ์œจ์„ฑ: 13.3
ํ•ฉ๊ณ„: 100.0 / 100.0
๋ฐ˜์‘ํ˜•