https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
❗풀이방법
1. unordered_map을 사용하여 key를 추가한다.
key가 중복되면 value값을 증가시킨다
#include <unordered_map>
unordered_map<int, int> map;
for (int i = 0; i < tangerine.size(); i++)
{
auto findIter = map.find(tangerine[i]);
if (findIter == map.end())
{
map.insert({ tangerine[i], 1 });
}
else
map[tangerine[i]]++;
}
2. value값으로 정렬하기 위해서 vector로 값을 복사한다.
// unordered_map 안에 value값으로 정렬해야함
// 1. map의 원소를 vector로 복사
// -> iterator가 가리키는 값을 복사해서 저장함 (pair가 포인터일 필요는 없음)
vector<pair<int, int>> vec(map.begin(), map.end());
3. pair.second값을 기준으로 내림차순 정렬한다.
#include <algorithm>
bool compare(pair<int,int>& tu1, pair<int,int>& tu2)
{
// 큰순으로 정렬
return tu1.second > tu2.second;
}
sort(vec.begin() , vec.end() , compare );
4. pair.second 값 즉 갯수를 더하면서 총 갯수 (k)값이 넘는지 검사한다
int sum = 0;
for (int i = 0; i < vec.size(); i++)
{
if (sum >= k)
{
break;
}
sum += vec[i].second;
answer++;
}
❗전체코드
bool compare(pair<int,int> tu1, pair<int,int> tu2)
{
// second가 큰순으로 정렬
return tu1.second > tu2.second;
}
int solution(int k, vector<int> tangerine) {
int answer = 0;
unordered_map<int, int> map;
for (int i = 0; i < tangerine.size(); i++)
{
auto findIter = map.find(tangerine[i]);
if (findIter == map.end())
{
map.insert({ tangerine[i], 1 });
}
else
map[tangerine[i]]++;
}
// unordered_map 안에 value값으로 정렬해야함
// 1. map의 원소를 vector로 복사
// -> iterator가 가리키는 값을 복사해서 저장함 (pair가 포인터일 필요는 없음)
vector<pair<int, int>> vec(map.begin(), map.end());
sort(vec.begin() , vec.end() , compare );
int sum = 0;
for (int i = 0; i < vec.size(); i++)
{
if (sum >= k)
{
break;
}
sum += vec[i].second;
answer++;
}
return answer;
}
로직 생각하는데는 얼마 안 걸렸는데 c++ 로 한다고 STL사용법이나 문법적으로 찾아본다고 시간이 많이 걸렸다....
kimYouChae - Overview
클라이언트 개발자 지망생입니다! . kimYouChae has 6 repositories available. Follow their code on GitHub.
github.com
'프로그래머스' 카테고리의 다른 글
[C++][프로그래머스][Lv2] 131127.할인행사 (2) | 2025.01.24 |
---|---|
[C++][프로그래머스][Lv2] 12985.예상 대진표 (1) | 2025.01.23 |
[C++][프로그래머스][Lv2] 12981. 영어끝말잇기 (2) | 2025.01.21 |
[C++][프로그래머스][Lv2] 12980. 점프와 순간이동 (0) | 2024.07.18 |
[C++][프로그래머스][Lv2] 42842. 카펫 (1) | 2024.07.18 |