💻 Coding/[Algorithm]Python

프로그래머스 | 귤 고르기 ⭐⭐ - Python

🩷 민영 2024. 4. 3. 17:09

🗒️ 문제

https://school.programmers.co.kr/learn/courses/30/lessons/138476 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

- 귤 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의 인덱스 값으로 카운트를 해야 한다.