https://school.programmers.co.kr/learn/courses/30/lessons/42579
๋ฌธ์ ์ค๋ช
์คํธ๋ฆฌ๋ฐ ์ฌ์ดํธ์์ ์ฅ๋ฅด ๋ณ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋ ๊ฐ์ฉ ๋ชจ์ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ์ํ๋ ค ํฉ๋๋ค. ๋ ธ๋๋ ๊ณ ์ ๋ฒํธ๋ก ๊ตฌ๋ถํ๋ฉฐ, ๋ ธ๋๋ฅผ ์๋กํ๋ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ํ ๋ ธ๋๊ฐ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ด์์ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ด์์ ์ฌ์ ํ์๊ฐ ๊ฐ์ ๋ ธ๋ ์ค์์๋ ๊ณ ์ ๋ฒํธ๊ฐ ๋ฎ์ ๋ ธ๋๋ฅผ ๋จผ์ ์๋กํฉ๋๋ค.
๋ ธ๋์ ์ฅ๋ฅด๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด genres์ ๋ ธ๋๋ณ ์ฌ์ ํ์๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด plays๊ฐ ์ฃผ์ด์ง ๋, ๋ฒ ์คํธ ์จ๋ฒ์ ๋ค์ด๊ฐ ๋ ธ๋์ ๊ณ ์ ๋ฒํธ๋ฅผ ์์๋๋ก return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ์ธ์.
์ ํ์ฌํญ
- genres[i]๋ ๊ณ ์ ๋ฒํธ๊ฐ i์ธ ๋ ธ๋์ ์ฅ๋ฅด์ ๋๋ค.
- plays[i]๋ ๊ณ ์ ๋ฒํธ๊ฐ i์ธ ๋ ธ๋๊ฐ ์ฌ์๋ ํ์์ ๋๋ค.
- genres์ plays์ ๊ธธ์ด๋ ๊ฐ์ผ๋ฉฐ, ์ด๋ 1 ์ด์ 10,000 ์ดํ์ ๋๋ค.
- ์ฅ๋ฅด ์ข ๋ฅ๋ 100๊ฐ ๋ฏธ๋ง์ ๋๋ค.
- ์ฅ๋ฅด์ ์ํ ๊ณก์ด ํ๋๋ผ๋ฉด, ํ๋์ ๊ณก๋ง ์ ํํฉ๋๋ค.
- ๋ชจ๋ ์ฅ๋ฅด๋ ์ฌ์๋ ํ์๊ฐ ๋ค๋ฆ ๋๋ค.
์ ์ถ๋ ฅ ์
genres plays return
["classic", "pop", "classic", "classic", "pop"] | [500, 600, 150, 800, 2500] | [4, 1, 3, 0] |
์ ์ถ๋ ฅ ์ ์ค๋ช
classic ์ฅ๋ฅด๋ 1,450ํ ์ฌ์๋์์ผ๋ฉฐ, classic ๋ ธ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณ ์ ๋ฒํธ 3: 800ํ ์ฌ์
- ๊ณ ์ ๋ฒํธ 0: 500ํ ์ฌ์
- ๊ณ ์ ๋ฒํธ 2: 150ํ ์ฌ์
pop ์ฅ๋ฅด๋ 3,100ํ ์ฌ์๋์์ผ๋ฉฐ, pop ๋ ธ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณ ์ ๋ฒํธ 4: 2,500ํ ์ฌ์
- ๊ณ ์ ๋ฒํธ 1: 600ํ ์ฌ์
๋ฐ๋ผ์ pop ์ฅ๋ฅด์ [4, 1]๋ฒ ๋ ธ๋๋ฅผ ๋จผ์ , classic ์ฅ๋ฅด์ [3, 0]๋ฒ ๋ ธ๋๋ฅผ ๊ทธ๋ค์์ ์๋กํฉ๋๋ค.
- ์ฅ๋ฅด ๋ณ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ๋ ธ๋๋ฅผ ์ต๋ ๋ ๊ฐ๊น์ง ๋ชจ์ ๋ฒ ์คํธ ์จ๋ฒ์ ์ถ์ํ๋ฏ๋ก 2๋ฒ ๋ ธ๋๋ ์๋ก๋์ง ์์ต๋๋ค.
๋ด ํด๋ต
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
map<string, int> m_genres_playtime;
map<string, map<int,int>> m_musiclist; // genre, <index, playtime>
for(int i = 0; i < genres.size(); ++i)
{
// ์ฅ๋ฅด๋ณ ํ๋ ์ดํ์ ๊ตฌํ๊ธฐ
m_genres_playtime[genres[i]] += plays[i];
// ์์
๋ฆฌ์คํธ ๋งต์ ์์
์ ๋ณด ์ถ๊ฐํ๊ธฐ
m_musiclist[genres[i]][i] = plays[i];
}
// ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด๋ถํฐ ์จ๋ฒ ๋
ธ๋ ๋ฆฌ์คํธ ์ฐพ๊ธฐ
while(!m_genres_playtime.empty())
{
// ๊ฐ์ฅ ๋ง์ด ์ฌ์๋ ์ฅ๋ฅด ์ฐพ๊ธฐ
string most_popular_genre;
int max = 0;
//์ฅ๋ฅด ์ค์์ ์ ์ผ๋์ ๊ฒ ์ฐพ๊ธฐ
for (auto mu : m_genres_playtime)
{
if (max < mu.second){
max = mu.second;
most_popular_genre = mu.first;
}
}
// ์ฅ๋ฅด ๋ด์์ ๊ฐ์ฅ ์ฌ์ ์๊ฐ ๋์ ๊ฒ์ ์ฐพ๊ธฐ
for(int i = 0; i < 2; ++i) // ํ ์ฅ๋ฅด๋น ๋
ธ๋๊ฐ ์ต๋ 2๊ณก์ด๋ฏ๋ก 2๋ฒ ๋ฐ๋ณต
{
int index = -1;
int max = 0;
// ์ฅ๋ฅด์์ ๊ฐ์ฅ ์ธ๊ธฐ๊ฐ ๋ง์ ๋
ธ๋ ์ฐพ๊ธฐ
for (auto mu : m_musiclist[most_popular_genre])
{
if (max < mu.second)
{
max = mu.second;
index = mu.first;
}
}
// ๋ง์ฝ ๋
ธ๋๊ฐ ์๋ค๋ฉด break
if(-1 == index)
break;
answer.push_back(index);
m_musiclist[most_popular_genre].erase(index);
}
m_genres_playtime.erase(most_popular_genre);
}
return answer;
}
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ๊ธฐ๋ฅ๊ฐ๋ฐ(C++) (0) | 2023.03.16 |
---|---|
programmers / level.1 / ๊ฐ์ ์ซ์๋ ์ซ์ด(C++) (0) | 2023.03.14 |
programmers / level.2 / ์์ฅ(C++) (0) | 2023.03.13 |
programmers / level.1 / ์์ฃผํ์ง ๋ชปํ ์ ์(C++) (0) | 2023.02.06 |
programmers / level.1 / ํฐ์ผ๋ชฌ(C++) (0) | 2023.02.06 |