Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 완전탐색
- Python
- BFS
- 문자열
- 다익스트라
- 오라클
- 브루트포스
- 그래프 이론
- 파이썬
- 다이나믹 프로그래밍
- 그래프 탐색
- 프로그래머스
- 구현
- DFS
- 백준 알고리즘
- SWEA
- 백준알고리즘
- DP
- 깊이우선탐색
- 너비 우선 탐색
- oracle
- javascript
- SW Expert Academy
- 스택
- 너비우선탐색
- 자바스크립트
- 백트래킹
- 그리디 알고리즘
- 브루트포스 알고리즘
- 데이터베이스
Archives
- Today
- Total
민규의 흔적
[Python 파이썬] 프로그래머스 - 귤 고르기 본문
2024년 8월 6일
문제 링크 : 프로그래머스 - 귤 고르기
문제 접근
그리디하게 접근해 간단하게 풀 수 있는 문제라고 판단했다.
각 귤마다 이산 값을 가지며, 상자 하나에 k개의 귤을 담고자 할 때 귤의 크기 종류가 최소가 되도록 하고 싶으므로
각 크기 별 귤의 개수를 딕셔너리에 저장해 각 value 값을 리스트 형태로 뽑아와 내림차순 정렬하여 종류가 많은 귤부터 상자에 넣으면 된다고 결론냈다.
k = 6, tangerine = [1, 3, 2, 5, 4, 5, 2, 3] 인 입력 예시를 들어보자.
각 크기별 개수를 딕셔너리 형태로 담아내면 다음과 같다.
dict = {1 : 1, 2 : 2, 3 : 2, 4 : 1, 5 : 2}
각 value 값을 리스트 형태로 뽑아내면 다음과 같다.
[1, 2, 2, 1, 2]
이를 내림차순으로 정렬하면 다음과 같다.
[2, 2, 2, 1, 1]
각 무게 별 개수가 많은 귤부터 상자에 먼저 담아야 종류가 최소가 되도록 담을 수 있으므로, 리스트의 맨 앞에서부터 값을 k로부터 빼며, k가 0 이하가 되면 더 이상 상자에 그만 담도록 로직을 구성하면 된다.
리스트의 각 요소를 탐색할 때마다 result를 1씩 증가시켜주며, 로직이 끝났을 때의 result가 원하는 답이 된다.
전체 코드
def solution(k, tangerine):
answer = 0
dict = {}
for idx in range(len(tangerine)):
if tangerine[idx] in dict:
dict[tangerine[idx]] += 1
else:
dict[tangerine[idx]] = 1
sorted_by_cnt = []
for _, value in dict.items():
sorted_by_cnt.append(value)
# 내림차순 정렬
sorted_by_cnt.sort(reverse=True)
for cnt in sorted_by_cnt:
k -= cnt
answer += 1
if k <= 0:
break
return answer
if __name__ == "__main__":
print(solution(6, [1, 3, 2, 5, 4, 5, 2, 3]))
풀이 후기
그리디하게 풀 수 있는 간단한 문제였다.
'프로그래머스' 카테고리의 다른 글
[Python 파이썬] 프로그래머스 - 과제 진행하기 (0) | 2024.09.24 |
---|---|
[Python 파이썬] 프로그래머스 - 땅따먹기 (1) | 2024.09.10 |
[Python 파이썬] 프로그래머스 - 네트워크 (0) | 2024.08.06 |
[Python 파이썬] 프로그래머스 - 베스트앨범 (0) | 2024.07.17 |
[Python 파이썬] 프로그래머스 - 다리를 지나는 트럭 (0) | 2024.07.17 |