2021. 11. 30. 20:25ใETC/Algorithm
๋ฌธ์ ์ค๋ช
XX ๊ฒ์์์๋ ์งํ ํธ์ง ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ํ๋ ์ด์ด๊ฐ ์ง์ ๊ฒ์ ์ ์งํ์ ์์ ํ ์ ์์ต๋๋ค. ์ด ๊ฒ์์์๋ 1 x 1 x 1 ํฌ๊ธฐ์ ์ ์ก๋ฉด์ฒด ๋ธ๋ก์ ์์ ๊ฒ์ ์ ์งํ์ ํํํฉ๋๋ค. ์ด๋, ๋ธ๋ก์ด ๊ณต์ค์ ๋ ์๊ฑฐ๋, ๋ธ๋ก ํ๋๊ฐ ์ฌ๋ฌ ๊ฐ์ ์นธ์ ๊ฑธ์ณ ๋์ผ ์๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ์งํ์ ํธ์งํ๊ธฐ ์ํด์๋ ๊ฐ ์นธ์ ์ ์ผ ์์ ๋ธ๋ก 1๊ฐ๋ฅผ ์๋ก ์ถ๊ฐํ๊ฑฐ๋, ์ ์ผ ์์ ์๋ ๋ธ๋ก ํ ๊ฐ๋ฅผ ์ญ์ ํ๋ ๋ฐฉ์์ผ๋ก ์งํ์ ์์ ํด์ผ ํฉ๋๋ค. ์ด๋, ๋ธ๋ก ํ ๊ฐ๋ฅผ ์๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๊ธฐ ์ํด์๋ ๊ฒ์๋จธ๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ๋ช ๊ฐ์ ๋ธ๋ก์ ์ถ๊ฐํ๊ณ ์ญ์ ํ ์ง ์ ์คํ ์ ํ์ด ํ์ํฉ๋๋ค.
์ด ๊ฒ์์ ์ฆ๊ธฐ๋ ํ ํ๋ ์ด์ด๋ N x N ํฌ๊ธฐ์ ์ง์ญ์ ์์ ๋ง์ ๋ณ์ฅ์ ๋ง๋ค๊ณ ์ถ์ด์ก์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ธํ๋ถํํ ์งํ์ ๋ชจ๋ ์นธ์ ๋์ด๊ฐ ๊ฐ์์ง๋๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด๋, ๋ธ๋ก ํ ๊ฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด P์ ๋น์ฉ์ด, ์ ๊ฑฐํ๋ ค๋ฉด Q์ ๋น์ฉ์ด ๋ค๊ฒ ๋ฉ๋๋ค.
๋ค์์ ๋ธ๋ก ํ ๊ฐ๋ฅผ ์ถ๊ฐํ ๋ 5์ ๋น์ฉ์ด, ์ ๊ฑฐํ ๋ 3์ ๋น์ฉ์ด ๋๋ ๊ฒฝ์ฐ, 3 x 3 ๋์ด์ ๋ชจ๋ ์นธ์ ๋ธ๋ก ๋์ด๊ฐ ๊ฐ์์ง๋๋ก ๋ง๋๋ ์์์
๋๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์งํ ๋ธ๋ก์ด ๋์ฌ ์๋ ๊ฒฝ์ฐ ๋ชจ๋ ์นธ์ ๋์ด๊ฐ 3์ผ๋ก ๊ฐ์์ง๋๋ก ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ด ๋ฉ๋๋ค.
์ด๋ฅผ ์ํด์๋ 3๋ณด๋ค ๋์ ์นธ์ ๋ธ๋ก 2๊ฐ๋ฅผ ์ ๊ฑฐํ๊ณ , 3๋ณด๋ค ๋ฎ์ ์นธ์ ์ด 8๊ฐ์ ๋ธ๋ก์ ์ถ๊ฐํด์ผ ํ๋ฉฐ, 2 x 3 + 8 x 5 = 46์ ๋น์ฉ์ด ๋ค๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ชจ๋ ์นธ์ ๋์ด๊ฐ 2๋ก ๊ฐ์์ง๋๋ก ํ ๋๋ 6๊ฐ์ ๋ธ๋ก์ ์ ๊ฑฐํ๊ณ , 3๊ฐ์ ๋ธ๋ก์ ์ถ๊ฐํ๋ฉด 6 x 3 + 3 x 5 = 33์ ๋น์ฉ์ด ๋ค๊ฒ ๋๋ฉฐ, ์ด๋๊ฐ ์ต์๋น์ฉ์ด ๋ฉ๋๋ค.
ํ์ฌ ์งํ์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฐฐ์ด land์ ๋ธ๋ก ํ ๊ฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ํ์ํ ๋น์ฉ P, ๋ธ๋ก ํ ๊ฐ๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ ํ์ํ ๋น์ฉ Q๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์นธ์ ์์ฌ์๋ ๋ธ๋ก์ ๋์ด๊ฐ ๊ฐ์์ง๋๋ก ํ๋ ๋ฐ ํ์ํ ๋น์ฉ์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ์ฌํญ- land๋ N x N ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ด๋ฉฐ, N์ ๋ฒ์๋ 1 ≤ N ≤ 300์ ๋๋ค.
- land์ ๊ฐ ์์๋ ๊ฐ ์นธ์ ๋์ฌ ์๋ ๋ธ๋ก์ ์๋ฅผ ๋ํ๋ด๋ฉฐ, 0 ์ด์ 10์ต ์ดํ์ ์ ์์ ๋๋ค.
- ๊ฐ ์นธ์ ๋ธ๋ก ํ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐ๋ P, ์ ๊ฑฐํ๋ ๋ฐ๋ Q์ ๋น์ฉ์ด ๋ค๋ฉฐ, P, Q์ ๋ฒ์๋ 1 ≤ P, Q ≤ 100์ธ ์์ฐ์์ ๋๋ค.
์ ์ถ๋ ฅ ์
land | P | Q | result |
[[1, 2], [2, 3]] | 3 | 2 | 5 |
[[4, 4, 3], [3, 2, 2], [ 2, 1, 0 ]] | 5 | 3 | 33 |
์ ์ถ๋ ฅ ์ #1
- ๋ชจ๋ ๋ ์ ๋์ด๋ฅผ 1๋ก ๋ง์ถ๋ ๋ฐ๋ ๋ธ๋ก 4๊ฐ๋ฅผ ์ ๊ฑฐํด์ผ ํ๋ฏ๋ก 8์ ๋น์ฉ์ด ๋ญ๋๋ค.
- ๋ชจ๋ ๋ ์ ๋์ด๋ฅผ 2๋ก ๋ง์ถ๋ ๋ฐ๋ ๋ธ๋ก 1๊ฐ๋ฅผ ์ถ๊ฐํ๊ณ ๋ธ๋ก 1๊ฐ๋ฅผ ์ ๊ฑฐํด์ผ ํ๋ฏ๋ก 5์ ๋น์ฉ์ด ๋ญ๋๋ค.
- ๋ชจ๋ ๋ ์ ๋์ด๋ฅผ 3์ผ๋ก ๋ง์ถ๋ ๋ฐ๋ ๋ธ๋ก 4๊ฐ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ฏ๋ก 12์ ๋น์ฉ์ด ๋ญ๋๋ค.
๋ฐ๋ผ์ ์ต์ ๋น์ฉ์ 5์ด๋ฏ๋ก 5๋ฅผ return ํฉ๋๋ค.
์
์ถ๋ ฅ ์ #2
๋ฌธ์ ์ ์์์ ๊ฐ์ผ๋ฉฐ ์ต์ ๋น์ฉ์ 33์
๋๋ค.
๋ฌธ์ ํด๊ฒฐ
C++
#include<vector>
#include<climits>
#include<algorithm>
using namespace std;
long long solution(vector<vector<int>> land, int P, int Q) {
long long answer = LLONG_MAX;
vector<long long> flat;
long long total = 0;
long long prev = -1, block = 0;
for (int i = 0; i < land.size(); i++) {
for (int j = 0; j < land[i].size(); j++) {
flat.push_back(land[i][j]);
total+= land[i][j];
}
}
sort(flat.begin(), flat.end());
for (int cur = 0; cur < flat.size(); cur++) {
if (prev != flat[cur]) {
long long add = flat[cur] * cur - block;
long long remove = total - (flat.size() * flat[cur]) + add;
long long cost = add * P + remove * Q;
if (answer > cost) answer = cost;
prev = flat[cur];
}
block += flat[cur];
}
return answer;
}
1) ๋จผ์ 2์ฐจ์ ๋ฐฐ์ด์ 1์ฐจ์ ๋ฐฐ์ด๋ก ๋ณํ์ํต๋๋ค.
1-1) ๋ชจ๋ ๋ธ๋ญ์ ์์ ์นด์ดํ ํฉ๋๋ค.
2) 1์ฐจ์์ผ๋ก ํผ์น ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค.
3) ์๋ก์ด ๋์ด์ ๋ธ๋ญ์ด ๋์ฌ ๋๋ง๋ค cost
๋ฅผ ๊ณ์ฐํ์ฌ answer
์ ์
๋ฐ์ดํธ ์ํต๋๋ค.
3-1) ํ์ํ ๋ธ๋ญ๋ค์ ์๋ฅผ ์นด์ดํธ ํฉ๋๋ค. ๐๐ป block
3-2) ํ์ฌ ํ์์ค์ธ(cur
) ๋ธ๋ญ์ ๋์ด (flat[cur]
) ๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋์ ๊ฐ์ด ๊ณ์ฐํฉ๋๋ค.
3-2-1) CASE ADD : ํ์ํ๋ ๋ธ๋ญ๋ค์ (flat[cur]
๋ณด๋ค ๋ฎ์ ๋์ด์ ๋ธ๋ญ๋ค) ๋ธ๋ญ์ ์ฑ์๋์์ผํ๊ธฐ ๋๋ฌธ์ ํ์ํ ๋ธ๋ญ๊น์ง์ ๋์ด(flat[cur] * cur
) ์ ์นด์ดํ
ํ ๋ธ๋ญ ์ (block
)๋ฅผ ๋นผ์ ์ฑ์ธ ๋ธ๋ญ(add
)์ ๊ตฌํฉ๋๋ค.
3-2-2) CASE REMOVE : ํ์ํ์ง ์์ ๋ธ๋ญ๋ค์ ๋ง์ถ๊ณ ์ ํ๋ ๋์ด์ ํด๋นํ๋ ๋์ด (flat.size() * flat[cur]
) ์์ 3-2-1)
์์ ์ถ๊ฐํ ๋งํผ๋ง ์ ์ธํ ํ ๋ชจ๋ ๋ธ๋ญ(total
)์์ ์ ์ธ ์์ผ์ฃผ๋ฉด ์์ ๋ ค๋ ๋ธ๋ญ์ ์๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค.
Python
from functools import reduce
def solution(land, P, Q):
answer = float('inf')
prev = -1
block = 0
flat = reduce(lambda x,y :x+y , land)
total = sum(flat)
flat.sort()
for cur in range(len(flat)):
if prev != flat[cur]:
add = flat[cur] * cur - block;
remove = total - (len(flat) * flat[cur]) + add;
cost = add * P + remove * Q;
if answer > cost:
answer = cost;
prev = flat[cur];
block += flat[cur];
return answer
'ETC > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers, ์ฌ ์ฐ๊ฒฐํ๊ธฐ (2) | 2021.12.02 |
---|---|
Programmers, ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ (0) | 2021.12.02 |
Programmers, ๊ธฐ์ง๊ตญ ์ค์น (0) | 2021.11.29 |
Programmers, ๋ฐฐ๋ฌ (0) | 2021.11.29 |
Programmers, ์์๋ง๋ค๊ธฐ (0) | 2021.11.27 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐