본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 파이썬 문제풀이 - 귤 고르기

by whdgus928 2023. 1. 13.

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

 

프로그래머스

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

programmers.co.kr

 

첫 풀이

1. 귤 개수를 추가할 딕셔너리 만들고 value 추가하기

2. 귤 개수인 value로 내림차순 정렬

3. 귤 개수 더해가며 k개 맞추기

def solution(k, tangerine):
    answer = 0
    dic={} #딕셔너리 만들기
    for i in list(set(tangerine)):
        dic[i]=0
    for i in tangerine: # 숫자만큼 딕셔너리 추가
        dic[i]+=1
    dic=sorted(dic.items(),key=lambda x:x[1],reverse=True)
    
    cnt=0
    for i in dic: #정렬된 딕셔너리로 귤 개수 맞추기
        if cnt+i[1]<k:
            cnt+=i[1]
            answer+=1
        elif cnt+i[1]==k:
            return answer+1
        else:
            return answer+1

 

더 나은 답안

1. 귤 개수를 추가할 딕셔너리 만들고 value 추가하기  -> Counter() 사용

2. 귤 개수 더해가며 k개 맞추기 -> 빼가며 맞추기

 

from collections import Counter
def solution(k, tangerine):
    answer = 0
    counter=Counter(tangerine)
    # {3: 2, 2: 2, 5: 2, 1: 1, 4: 1}
    sort_=sorted(counter.items(),key=lambda x:x[1],reverse=True)
    
    #정렬된 딕셔너리로 귤 개수 맞추기
    cnt=0
    for i in sort_:
        k-=i[1]
        answer+=1
        
        if k<=0:
            break
            
    return answer

 

배운 점

1. Counter() 사용하면 개수만큼 딕셔너리 형태로 제공

2. 개수를 찾을때 더하는 방식보다 빼는 방식이 구현하기 간단함

반응형

댓글