-
프로그래머스 귤 고르기 c++알고리즘/프로그래머스 2022. 11. 26. 15:24반응형
#include <string> #include <vector> #include <algorithm> #include <map> #include <vector> #include <iostream> using namespace std; bool cmp(const pair<int,int>& a, const pair<int,int>& b) { if(a.second == b.second) return a.first < b.first; return a.second > b.second; } int solution(int k, vector<int> tangerine) { int answer = 0; map<int,int> tangerineSize; for(int i=0; i<tangerine.size(); i++) { tangerineSize[tangerine[i]]++; } vector<pair<int,int>> vec(tangerineSize.begin(),tangerineSize.end()); sort(vec.begin(),vec.end(),cmp); int presentSize = 0; for(int i=0; i<vec.size(); i++) { presentSize = presentSize + vec[i].second; answer++; if(presentSize >= k) break; } return answer; }
프로그램 흐름
1. 귤의 크기별 개수 저장 ( map 컨테이너 사용 )
2. 정렬을 위해 map 컨테이너의 원소들을 vector pair 안에 저장
3. vector 내림차순 정렬
4. 귤의 개수가 k 이상이 될때까지 크기순으로 내려가며 더해줌
**
귤의 개수가 최대 100,000 개 이므로 2중 for 문을 사용할시 시간이 10초를 넘김.
2중 for 문을 사용하지 않으면서 시간복잡도를 최소화 하기위해 map 컨테이너 사용
728x90반응형'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 혼자 놀기의 달인 c++ (0) 2022.11.27 프로그래머스 숫자 카드 나열 c++ (0) 2022.11.27 프로그래머스 롤케이크자르기 c++ (0) 2022.11.08 프로그래머스 택배상자 c++ (0) 2022.10.14 프로그래머스 연속 부분 수열 합의 개수 c++ (0) 2022.10.14