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 |
---|