🗒️ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/138476
- 귤 K개를 상자에 크기별로 분류를 할 것이다.
- 이 때, 귤 크기의 종류를 최소화 한 결과 출력
🤖 알고리즘
1. cnt_list 를 tangerine의 최대값으로 설정
2. 귤 크기에 따른 개수 카운트 해주기
3. cnt_list를 내림차순 정렬
4-1. while 문을 이용하여 k > 0 일 때, cnt_list 값을 k에서 하나씩 빼주고 횟수를 answer += 1 (틀린 풀이)
4-2. for문을 이용하여 k = k - cnt_list[i] 후에 k가 0보다 크거나 작을 때의 cnt_list 인덱스 + 1 값을 answer
✏️ 내 풀이
## 틀린 풀이
def solution(k, tangerine):
cnt_list = [0] * max(tangerine)
answer = 0
for i in range(len(tangerine)):
cnt_list[tangerine[i]-1] += 1
cnt_list.sort(reverse = True)
print(cnt_list)
while k > 0:
for i in cnt_list:
if k >= i:
k = k - i
print(k)
answer += 1
break
return answer
## 정답 풀이
def solution(k, tangerine):
cnt_list = [0] * max(tangerine)
answer = 0
for i in range(len(tangerine)):
cnt_list[tangerine[i]-1] += 1
cnt_list.sort(reverse = True)
for i in range(len(cnt_list)):
k = k - cnt_list[i]
if k <= 0:
answer = i + 1
break
return answer
😊 후기
첫 번째 풀이로 문제를 풀 경우 아래 반례에서 오류가 나게 된다.
처음 푼 풀이의 경우, 무조건 k보다 작은 값의 귤 개수로 넣어야 한다고 생각했다. 그러나 k보다 크더라도 남은 귤로 박스를 채우면 되기 때문에 k에서 값을 뺀 횟수로 answer을 카운트 할 게 아닌, cnt_list의 인덱스 값으로 카운트를 해야 한다.
'💻 Coding > [Algorithm]Python' 카테고리의 다른 글
프로그래머스 | 바탕화면 정리 ⭐ - Python (0) | 2024.04.06 |
---|---|
프로그래머스 | 달리기 경주 ⭐ - Python (1) | 2024.04.04 |
프로그래머스 | 성격 유형 검사하기 ⭐ - Python (0) | 2024.04.02 |
소프티어 | 우물 안 개구리 ⭐⭐⭐ - PYTHON (0) | 2024.03.22 |
소프티어 | 강의실 배정 ⭐⭐⭐ - PYTHON (0) | 2024.03.20 |