728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
---------------------------------------------------핵심 알고리즘--------------------------------------------
크기 별로 tangerine의 개수를 구해, 각 개수를 내림차순 정렬 후, 앞에서부터 더해가며 합이 k개가 되면 종료.
몇 개의 종류를 포함했는지 즉, 앞에서부터 확인한 개수가 정답이다.
---------------------------------------------------풀이----------------------------------------------------
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 각 크기 별 개수
int sizes[10'000'001] = {0, };
// 개수들을 저장
vector<int> v;
// k개를 골라 서로 다른 종류가 최소가 될 때 그 값=?
int solution(int k, vector<int> tangerine) {
int answer = 0;
for(int i = 0; i < tangerine.size(); i++){
sizes[tangerine[i]]++;
}
for(int i = 0; i < 10'000'001; i++){
if(sizes[i] > 0){
v.push_back(sizes[i]);
}
}
// 각 개수들을 내림차순 정렬
sort(v.begin(), v.end(), greater<>());
int sum = 0;
for(int i = 0; i < v.size(); i++){
sum += v[i];
answer++;
// k개만큼 모두 담았으면 종료
if(sum >= k){
break;
}
}
return answer;
}
---------------------------------------------------후기----------------------------------------------------
map을 사용해 각 크기 별 개수를 구하는 방법도 생각했지만, 제일 단순한 방식으로 풀어봤다.
이렇게 풀었더니 테스트케이스의 시간이 거의 14ms로 전부 비슷하게 나왔다.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[programmers] 숫자 타자 대회 (0) | 2023.05.15 |
---|---|
[programmers] 억억단을 외우자 (2) | 2023.05.12 |
[programmers] 점 찍기 (0) | 2023.05.12 |
[programmers] 디펜스 게임 (0) | 2023.05.12 |
[programmers] 테이블 해시 함수 (1) | 2023.05.12 |