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사용법이나 문법적으로 찾아본다고 시간이 많이 걸렸다....

 


https://github.com/kimYouChae

 

kimYouChae - Overview

클라이언트 개발자 지망생입니다! . kimYouChae has 6 repositories available. Follow their code on GitHub.

github.com

 

+ Recent posts