๋ฌธ์ ์ค๋ช
์นด์นด์คํก์์๋ ์ด๋ชจํฐ์ฝ์ ๋ฌด์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์ ์๋ฅผ ๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค.
์ด๋ฅผ ์ํด ์นด์นด์คํก์์๋ ์ด๋ชจํฐ์ฝ ํ ์ธ ํ์ฌ๋ฅผ ํ๋๋ฐ, ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์๋ฅผ ์ต๋ํ ๋๋ฆฌ๋ ๊ฒ.
- ์ด๋ชจํฐ์ฝ ํ๋งค์ก์ ์ต๋ํ ๋๋ฆฌ๋ ๊ฒ.
1๋ฒ ๋ชฉํ๊ฐ ์ฐ์ ์ด๋ฉฐ, 2๋ฒ ๋ชฉํ๊ฐ ๊ทธ ๋ค์์ ๋๋ค.
์ด๋ชจํฐ์ฝ ํ ์ธ ํ์ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํ๋ฉ๋๋ค.
- n๋ช ์ ์นด์นด์คํก ์ฌ์ฉ์๋ค์๊ฒ ์ด๋ชจํฐ์ฝ m๊ฐ๋ฅผ ํ ์ธํ์ฌ ํ๋งคํฉ๋๋ค.
- ์ด๋ชจํฐ์ฝ๋ง๋ค ํ ์ธ์จ์ ๋ค๋ฅผ ์ ์์ผ๋ฉฐ, ํ ์ธ์จ์ 10%, 20%, 30%, 40% ์ค ํ๋๋ก ์ค์ ๋ฉ๋๋ค.
์นด์นด์คํก ์ฌ์ฉ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ด๋ชจํฐ์ฝ์ ์ฌ๊ฑฐ๋, ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค์ ๊ฐ์ ํฉ๋๋ค.
- ๊ฐ ์ฌ์ฉ์๋ค์ ์์ ์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ผ์ ๋น์จ ์ด์ ํ ์ธํ๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๊ตฌ๋งคํฉ๋๋ค.
- ๊ฐ ์ฌ์ฉ์๋ค์ ์์ ์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค ๋น์ฉ์ ํฉ์ด ์ผ์ ๊ฐ๊ฒฉ ์ด์์ด ๋๋ค๋ฉด, ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค๋ฅผ ๋ชจ๋ ์ทจ์ํ๊ณ ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค์ ๊ฐ์ ํฉ๋๋ค.
๋ค์์ 2๋ช ์ ์นด์นด์คํก ์ฌ์ฉ์์ 2๊ฐ์ ์ด๋ชจํฐ์ฝ์ด ์์๋์ ์์์ ๋๋ค.
์ฌ์ฉ์ | ๋น์จ | ๊ฐ๊ฒฉ |
1 | 40 | 10,000 |
2 | 25 | 10,000 |
์ด๋ชจํฐ์ฝ | ๊ฐ๊ฒฉ |
1 | 7,000 |
2 | 9,000 |
1๋ฒ ์ฌ์ฉ์๋ 40%์ด์ ํ ์ธํ๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๊ตฌ๋งคํ๊ณ , ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค ๋น์ฉ์ด 10,000์ ์ด์์ด ๋๋ฉด ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค๋ฅผ ๋ชจ๋ ์ทจ์ํ๊ณ ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค์ ๊ฐ์ ํฉ๋๋ค.
2๋ฒ ์ฌ์ฉ์๋ 25%์ด์ ํ ์ธํ๋ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ ๊ตฌ๋งคํ๊ณ , ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค ๋น์ฉ์ด 10,000์ ์ด์์ด ๋๋ฉด ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค๋ฅผ ๋ชจ๋ ์ทจ์ํ๊ณ ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค์ ๊ฐ์ ํฉ๋๋ค.
1๋ฒ ์ด๋ชจํฐ์ฝ์ ๊ฐ๊ฒฉ์ 7,000์, 2๋ฒ ์ด๋ชจํฐ์ฝ์ ๊ฐ๊ฒฉ์ 9,000์์ ๋๋ค.
๋ง์ฝ, 2๊ฐ์ ์ด๋ชจํฐ์ฝ์ ๋ชจ๋ 40%์ฉ ํ ์ธํ๋ค๋ฉด, 1๋ฒ ์ฌ์ฉ์์ 2๋ฒ ์ฌ์ฉ์ ๋ชจ๋ 1,2๋ฒ ์ด๋ชจํฐ์ฝ์ ๊ตฌ๋งคํ๊ฒ ๋๊ณ , ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ์ฉ์ | ๊ตฌ๋งคํ ์ด๋ชจํฐ์ฝ | ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค ๋น์ฉ | ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์ฌ๋ถ |
1 | 1, 2 | 9,600 | X |
2 | 1, 2 | 9,600 | X |
์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์๋ 0๋ช ์ด ๋์ด๋๊ณ ์ด๋ชจํฐ์ฝ ํ๋งค์ก์ 19,200์์ด ๋์ด๋ฉ๋๋ค.
ํ์ง๋ง, 1๋ฒ ์ด๋ชจํฐ์ฝ์ 30% ํ ์ธํ๊ณ 2๋ฒ ์ด๋ชจํฐ์ฝ์ 40% ํ ์ธํ๋ค๋ฉด ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฌ์ฉ์ | ๊ตฌ๋งคํ ์ด๋ชจํฐ์ฝ | ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค ๋น์ฉ | ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์ฌ๋ถ |
1 | 2 | 5,400 | X |
2 | 1, 2 | 10,300 | O |
2๋ฒ ์ฌ์ฉ์๋ ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค ๋น์ฉ์ 10,000์ ์ด์ ์ฌ์ฉํ์ฌ ์ด๋ชจํฐ์ฝ ๊ตฌ๋งค๋ฅผ ๋ชจ๋ ์ทจ์ํ๊ณ ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค์ ๊ฐ์ ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์, ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์๋ 1๋ช ์ด ๋์ด๋๊ณ ์ด๋ชจํฐ์ฝ ํ๋งค์ก์ 5,400์์ด ๋์ด๋๊ฒ ๋ฉ๋๋ค.
์นด์นด์คํก ์ฌ์ฉ์ n๋ช ์ ๊ตฌ๋งค ๊ธฐ์ค์ ๋ด์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด users, ์ด๋ชจํฐ์ฝ m๊ฐ์ ์ ๊ฐ๋ฅผ ๋ด์ 1์ฐจ์ ์ ์ ๋ฐฐ์ด emoticons๊ฐ ์ฃผ์ด์ง๋๋ค. ์ด๋, ํ์ฌ ๋ชฉ์ ์ ์ต๋ํ์ผ๋ก ๋ฌ์ฑํ์ ๋์ ์ด๋ชจํฐ์ฝ ํ๋ฌ์ค ์๋น์ค ๊ฐ์ ์์ ์ด๋ชจํฐ์ฝ ๋งค์ถ์ก์ 1์ฐจ์ ์ ์ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋ด ํ์ด
DFS๋ฅผ ํตํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค. ๊ธธ์ฐพ๊ธฐ๊ฐ ์๋ DFS ๋ฌธ์ ํ์ด๊ฐ ์์ง ์ต์ํ์ง ์์ ์กฐ๊ธ ์ด๋ ค์ ๋ค.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int discount[] = {10, 20, 30, 40};
vector<pair<int, int>> emoticon_price(7, {0 , 0}); // {ํ ์ธ ๋ ๊ฐ๊ฒฉ, ํ ์ธ๋ฅ }
vector<int> answer = vector<int>(2, 0);
void dfs(int emoticon, int emoticon_count, vector<vector<int>> users, vector<int> emoticons)
{
if(emoticon < emoticon_count)
{
// ํ ์ธ๋ฅ ์ ๋ฐ๋ฅธ ์ด๋ชจํฐ์ฝ ๊ฐ๊ฒฉ ์ฑ
์
for(int i = 0; i < 4; ++i)
{
emoticon_price[emoticon].first = (100 - discount[i]) * emoticons[emoticon] / 100;
emoticon_price[emoticon].second = discount[i];
dfs(emoticon+1, emoticon_count, users, emoticons);
}
}
else
{
int subscribe = 0;
int purchase_prices = 0;
for(int i = 0; i < users.size(); ++i)
{
// ์ ์ ๊ฐ ๊ตฌ์
ํ ์ด๋ชจํฐ์ฝ๋ค์ ํ ์ธ ๋ ๊ฐ ๊ตฌํ๊ธฐ
int total_price = 0;
for(int j = 0; j < emoticon_count; ++j)
{
if(emoticon_price[j].second >= users[i][0])
total_price += emoticon_price[j].first;
}
// ์ ์ ๊ฐ ๊ตฌ๋
ํ ์ง ์ด๋ชจํฐ์ฝ๋ค์ ์ด์ง ๊ตฌ๋ถํ๊ธฐ
if(total_price >= users[i][1])
++subscribe;
else
purchase_prices += total_price;
}
// ๋ง์ฝ ๊ฐ์
์๊ฐ ๊ธฐ์กด์ ๊ฐ์
์ ๋ณด๋ค ๋ง๋ค๋ฉด ์ ๋ต์ผ๋ก ๋ฑ๋กํด๋๋ค.
if(subscribe > answer[0])
{
answer[0] = subscribe;
answer[1] = purchase_prices;
}
// ๊ฐ์
์ ์๋ ๊ฐ์๋ฐ ๊ตฌ๋งค ๋น์ฉ์ด ๋ ๋๋ค๋ฉด ์ ๋ต์ผ๋ก ๋ฑ๋กํด๋๋ค
else if(subscribe == answer[0])
{
if(purchase_prices > answer[1])
answer[1] = purchase_prices;
}
return;
}
}
vector<int> solution(vector<vector<int>> users, vector<int> emoticons)
{
dfs(0, emoticons.size(), users, emoticons);
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ์์ (C++) (0) | 2023.09.05 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ํฉ์น ํ์ ์๊ธ (C++) (0) | 2023.09.05 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.2 - ์คํ์ฑํ ๋ฐฉC++) (0) | 2023.08.25 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.3 - ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ(C++) (0) | 2023.08.22 |
[ํ๋ก๊ทธ๋๋จธ์ค]level.1 - ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์(C++) (2) | 2023.08.10 |