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

[프로그래머스] 귤 고르기 Python

by 몰라닉네임 2024. 3. 21.

1. [프로그래머스] 귤 고르기 Python

https://school.programmers.co.kr/learn/courses/30/lessons/138476?language=python3

 

프로그래머스

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

programmers.co.kr

 

2. 풀이

-1. 우선 몇 개인지 셀 수 있도록, for 문을 이용해서 cnt += 1 이런식으로 저장하게끔 만든다. 
-2 ( X ) 딕셔너리로 풀면 좋겠지만 모르겠다.   
-2 그래서 인덱스와 같은 숫자가 몇  개 있는지 배열로 저장한다.
-3 우선 k보다 크거나 같다면 그 수를 먼저 뺴준다. 이때 answer += 1, k, cnt[]의 개수도 뺴준다. k==0 이면 break나온다

 

 

3.소스코드

첫번째 풀이에서 인덱스와 같은 숫자가 몇개 있는지 배열로 저장하는 식으로 하면 시간초과가 나와 29.4 점이 나온다.

딕셔너리로 풀어야 한다.

def solution(k, tangerine):
    answer = 0
    #여기 IndexError: list index out of range 에러 해결 중요! 
    cnt =[0] * len(tangerine)
    
    for i in range(len(tangerine)):
        for j in range(1, len(tangerine)):
            if tangerine[i] == j:
                cnt[j-1] += 1
  
    cnt.sort(reverse = True)
   
    for i in range(len(cnt)):
        k = k - cnt[i]
        cnt[i] = k - cnt[i]
        answer += 1 
        if k <= 0:
            break
    return answer

 

딕셔너리를 이용한 코드

def solution(k, tangerine):
    answer = 0
    
    dic={} #딕셔너리 만들기
    for i in tangerine:
        if i in dic:
            dic[i] += 1
        else:
            dic[i] = 1
    #print(dic)

    dic = sorted(dic.items(), key = lambda x:x[1], reverse = True)
    #print(dic)    
    
    for i in dic:
        k -= i[1]
        answer += 1
        if k <= 0:
            break   
    return answer

 

 

'프로그래머스 > LV 2' 카테고리의 다른 글

[프로그래머스] 최댓값과 최솟값 Python  (0) 2023.10.15