728x90
알고리즘 챌린지 12일 차이다. 주말에 푹 쉬고 하니 확실히 상쾌하고 귀찮은 마음이 덜 생기는 것 같다. 목표를 향해 열심히 달려가는 것도 좋지만 역시 충분한 휴식이 병행되어야 한다는 점을 다시금 깨달았다.
오늘은 프로그래머스 Level2로 분류된 귤고르기 문제이다.
https://school.programmers.co.kr/learn/courses/30/lessons/138476?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해당 문제 또한 자료구조를 이용하면 쉽게 풀수 있는 문제로 최근에 풀었던 시소 짝꿍문제와 상당히 유사한 로직으로 풀이할 수 있다.
각 귤의 크기의 합이 주어진 k보다 크거나 같으면 되며, 서로 다른 귤의 무게가 최소의 조합으로 이루어지면 된다.
자바에서는 Map.getOrDefault를, 파이썬에서는 Counter를 이용하여 각 무게의 빈도수를 구한 뒤, 빈도수를 기준으로 내림차순 정렬한다.
종류가 많은 순서대로 변수에 누적합을 더해가면서 k와 값을 비교한다.
상당히 간단한 로직으로 아래 코드를 보면 금방 이해가 될 것이다.
Java
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
int answer = 0;
int sum = 0;
Map<Integer, Integer> counter = new HashMap<>();
for(int a : tangerine) {counter.put(a, counter.getOrDefault(a, 0) + 1);}
List<Integer> values = new ArrayList<>(counter.values());
Collections.sort(values, Collections.reverseOrder());
for(int num : values){
if(sum + num >= k) {
answer++;
break;
}else {
sum += num;
answer++;
}
}
return answer;
}
}
Python
from collections import Counter
def solution(k, tangerine):
answer = 0
sum = 0
counter = Counter(tangerine)
sorted_guul = sorted(counter.items(), key=lambda x: x[1], reverse=True)
for key, value in sorted_guul:
if value + sum >= k:
answer+=1
break
else:
sum += value
answer+=1
return answer
728x90
'알고리즘' 카테고리의 다른 글
프로그래머스_택배상자_day14 (0) | 2024.02.22 |
---|---|
프로그래머스_요격 시스템_day13 (0) | 2024.02.20 |
프로그래머스_리코쳇 로봇_Day11 (1) | 2024.02.16 |
프로그래머스_시소짝꿍_Day10 (0) | 2024.02.15 |
프로그래머스_마법의 엘리베이터_Day9 (0) | 2024.02.14 |