- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ค์ต์คํธ๋ผ
- Union-Find
- ๋ฐฑ์ค
- nestjs
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- ์๊ณ ๋ฆฌ์ฆ
- ๋นํธ๋งต
- golang
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- DFS
- ์์ฝ๋
- ์ํฐ๋
- ํ๋ฆฌ์จ๋ณด๋ฉ
- js
- ์น๋ฆฐ์ด
- DP
- go
- ์ด๋ถํ์
- ์นด์นด์ค2021
- LCs
- C++
- ์นด์นด์ค ์ฝํ
- ํธ๋ฆฌ
- BFS
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- Python
- ์ฌ๊ท
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๋นํธ๋ง์คํน
- Today
- Total
Hello Ocean! ๐ผ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ผ๊ทผ ์ง์ ๋ณธ๋ฌธ
๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/12927#
ํ์ฌ์ 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) |
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ซ์ ๊ฒ์ (0) | 2022.03.29 |
---|---|
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ดด๋์ง ์์ ๊ฑด๋ฌผ (0) | 2022.03.01 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ์ด์ค์ฐ์ ์์ํ (0) | 2022.03.01 |
[go/ํ๋ก๊ทธ๋๋จธ์ค] ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.02.08 |
[C++/ํ๋ก๊ทธ๋๋จธ์ค] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (2020 ์นด์นด์ค ์ธํด์ญ) (0) | 2022.01.18 |