https://school.programmers.co.kr/learn/courses/30/lessons/172927
๋ฌธ์ ์ค๋ช
๋ง์ธ์ ๊ณก๊ดญ์ด๋ก ๊ด์ฐ์์ ๊ด์์ ์บ๋ ค๊ณ ํฉ๋๋ค. ๋ง์ธ์ ๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด, ์ฒ ๊ณก๊ดญ์ด, ๋ ๊ณก๊ดญ์ด๋ฅผ ๊ฐ๊ฐ 0๊ฐ์์ 5๊ฐ๊น์ง ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ณก๊ดญ์ด๋ก ๊ด๋ฌผ์ ์บ ๋๋ ํผ๋ก๋๊ฐ ์๋ชจ๋ฉ๋๋ค. ๊ฐ ๊ณก๊ดญ์ด๋ก ๊ด๋ฌผ์ ์บ ๋์ ํผ๋ก๋๋ ์๋ ํ์ ๊ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฒ ๊ณก๊ดญ์ด๋ ๋ค์ด์๋ชฌ๋๋ฅผ ์บ ๋ ํผ๋ก๋ 5๊ฐ ์๋ชจ๋๋ฉฐ, ์ฒ ๊ณผ ๋์ ์บ๋๋ ํผ๋ก๋๊ฐ 1์ฉ ์๋ชจ๋ฉ๋๋ค. ๊ฐ ๊ณก๊ดญ์ด๋ ์ข ๋ฅ์ ์๊ด์์ด ๊ด๋ฌผ 5๊ฐ๋ฅผ ์บ ํ์๋ ๋ ์ด์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ง์ธ์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ์งํค๋ฉด์ ์ต์ํ์ ํผ๋ก๋๋ก ๊ด๋ฌผ์ ์บ๋ ค๊ณ ํฉ๋๋ค.
- ์ฌ์ฉํ ์ ์๋ ๊ณก๊ดญ์ด์ค ์๋ฌด๊ฑฐ๋ ํ๋๋ฅผ ์ ํํด ๊ด๋ฌผ์ ์บก๋๋ค.
- ํ ๋ฒ ์ฌ์ฉํ๊ธฐ ์์ํ ๊ณก๊ดญ์ด๋ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ์ฌ์ฉํฉ๋๋ค.
- ๊ด๋ฌผ์ ์ฃผ์ด์ง ์์๋๋ก๋ง ์บ ์ ์์ต๋๋ค.
- ๊ด์ฐ์ ์๋ ๋ชจ๋ ๊ด๋ฌผ์ ์บ๊ฑฐ๋, ๋ ์ฌ์ฉํ ๊ณก๊ดญ์ด๊ฐ ์์ ๋๊น์ง ๊ด๋ฌผ์ ์บก๋๋ค.
์ฆ, ๊ณก๊ดญ์ด๋ฅผ ํ๋ ์ ํํด์ ๊ด๋ฌผ 5๊ฐ๋ฅผ ์ฐ์์ผ๋ก ์บ๊ณ , ๋ค์ ๊ณก๊ดญ์ด๋ฅผ ์ ํํด์ ๊ด๋ฌผ 5๊ฐ๋ฅผ ์ฐ์์ผ๋ก ์บ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ, ๋ ์ฌ์ฉํ ๊ณก๊ดญ์ด๊ฐ ์๊ฑฐ๋ ๊ด์ฐ์ ์๋ ๋ชจ๋ ๊ด๋ฌผ์ ์บ ๋๊น์ง ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋ฉ๋๋ค.
๋ง์ธ์ด ๊ฐ๊ณ ์๋ ๊ณก๊ดญ์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด picks์ ๊ด๋ฌผ๋ค์ ์์๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด minerals๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ง์ธ์ด ์์ ์ ๋๋ด๊ธฐ๊น์ง ํ์ํ ์ต์ํ์ ํผ๋ก๋๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- picks๋ [dia, iron, stone]๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- 0 ≤ dia, iron, stone ≤ 5
- dia๋ ๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- iron์ ์ฒ ๊ณก๊ดญ์ด์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- stone์ ๋ ๊ณก๊ดญ์ด์ ์๋ฅผ ์๋ฏธํฉ๋๋ค.
- ๊ณก๊ดญ์ด๋ ์ต์ 1๊ฐ ์ด์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- 5 ≤ minerals์ ๊ธธ์ด ≤ 50
- minerals๋ ๋ค์ 3๊ฐ์ ๋ฌธ์์ด๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ๊ฐ๊ฐ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- diamond : ๋ค์ด์๋ชฌ๋
- iron : ์ฒ
- stone : ๋
์ ์ถ๋ ฅ ์
picks | minerals | result |
[1, 3, 2] | ["diamond", "diamond", "diamond", "iron", "iron", "diamond", "iron", "stone"] | 12 |
[0, 1, 1] | ["diamond", "diamond", "diamond", "diamond", "diamond", "iron", "iron", "iron", "iron", "iron", "diamond"] | 50 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
๋ค์ด์๋ชฌ๋ ๊ณก๊ดญ์ด๋ก ์์ ๋ค์ฏ ๊ด๋ฌผ์ ์บ๊ณ ์ฒ ๊ณก๊ดญ์ด๋ก ๋จ์ ๋ค์ด์๋ชฌ๋, ์ฒ , ๋์ 1๊ฐ์ฉ ์บ๋ฉด 12(1 + 1 + 1 + 1+ 1 + 5 + 1 + 1)์ ํผ๋ก๋๋ก ์บ ์ ์์ผ๋ฉฐ ์ด๋๊ฐ ์ต์๊ฐ์ ๋๋ค.
์ ์ถ๋ ฅ ์ #2
์ฒ ๊ณก๊ดญ์ด๋ก ๋ค์ด์๋ชฌ๋ 5๊ฐ๋ฅผ ์บ๊ณ ๋ ๊ณก๊ดญ์ด๊ณ ์ฒ 5๊ฐ๋ฅผ ์บ๋ฉด 50์ ํผ๋ก๋๋ก ์บ ์ ์์ผ๋ฉฐ, ์ด๋๊ฐ ์ต์๊ฐ์ ๋๋ค.
๋ด ํ์ด
๊ด๋ฌผ์ 5๊ฐ์ฉ ๋๋๋ ๊ณก๊ดญ์ด ๊ฐ์๋งํผ๋ง ๋๋ ์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ ์คํธ ์ผ์ด์ค 8๋ฒ์์ ์ค๋ฅ๊ฐ ๋๋ค.
#include <string>
#include <vector>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
bool comp(pair<int, vector<int>> p1, pair<int, vector<int>> p2)
{
if(p1.first > p2.first)
return true;
return false;
}
int solution(vector<int> picks, vector<string> minerals) {
int answer = 0;
int pick_count= 0;
vector<pair<int, vector<int>>> fatigues(minerals.size()/5+1);
// ๊ณก๊ดญ์ด ๊ฐ์๋ฅผ ๊ตฌํ๋ค
for(int p : picks)
pick_count += p;
// ๊ณก๊ดญ์ด ๊ฐ์๋งํผ 5๊ฐ์ฉ ์งค๋ผ์ ์๊ตฌ ํผ๋ก๋๋ฅผ ๊ตฌํ๋ค.
for(int i = 0; i < minerals.size(); ++i)
{
int index = i / 5;
if(index >= pick_count)
break;
int fatigue = 1;
if(minerals[i] == "diamond")
fatigue = 25;
else if(minerals[i] == "iron")
fatigue = 5;
fatigues[index].first += fatigue;
fatigues[index].second.push_back(fatigue);
}
// ์๊ตฌ ํผ๋ก๋๊ฐ ํฐ ์์๋๋ก ์ ๋ ฌํ๋ค
sort(fatigues.begin(), fatigues.end(), comp);
for(int i = 0; i < fatigues.size(); ++i)
{
int pick = 25;
// ๊ณก๊ดญ์ด๋ฅผ ๊ณ ๋ฅธ๋ค.
for(int p = 0; p < picks.size(); ++p)
{
if(picks[p] > 0)
{
picks[p]--;
break;
}
pick /=5;
}
// ๊ณก๊ดญ์ด์ ๋ฐ๋ฅธ ํผ๋ก๋๋ฅผ ๊ณ์ฐํ๋ค
for(int j = 0; j < fatigues[i].second.size(); ++j)
{
int fatigue = fatigues[i].second[j] / pick;
if(fatigue == 0)
fatigue = 1;
answer += fatigue;
}
}
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ๊ณผ์ ์งํํ๊ธฐ(C++) (0) | 2023.06.29 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์์ ๋์งํ(C++) (0) | 2023.06.28 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ํ๋ ฌ์ ๊ณฑ์ (C++) (0) | 2023.06.25 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ๋ฉ๋ฆฌ ๋ฐ๊ธฐ(C++) (0) | 2023.06.23 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ์๋ฌผ์ ์ ์ด์ (C++) (0) | 2023.06.21 |