프로그래머스 - 귤 고르기(레벨2)

응애개발자·2023년 6월 12일
0

파이썬 코테

목록 보기
4/11

첫번째 풀이.
다른사람의 풀이를 참고해서 풀었다.

from collections import Counter

def solution(k, tangerine):
    answer = 0

    counter=Counter(tangerine)

    sort_=sorted(counter.items(),key=lambda x:x[1],reverse=True)


    for i in sort_:
        k-=i[1]
        answer+=1

        if k<=0:
            break

    return answer

counter를 사용하면 간단하게 각 숫자별로 몇개씩 있는지 counter객체로 만들어준다.

Counter({3: 2, 2: 2, 5: 2, 1: 1, 4: 1})

이런식으로 생성되는데 이를 다음줄의 sort_에 정렬하여 저장한다.
이때 람다식을 이용해 딕셔너리로 치면 value값을 기준으로 정렬한다.
그리고 더해가는게 아니라 역으로 k에서 빼면서 갯수를 찾는다.

def solution(k, tangerine):
    answer = 0

    a = set(tangerine)
    arr = [0] * max(a)
    for i in tangerine:
            arr[i-1] += 1
    arr.sort(reverse = True)

    temp = 0
    for i in arr:
            temp += i
            if temp < k:
                    answer+=1
            elif temp >= k:
                    answer+=1
                    return answer

    return answer

일단 기본적인 구조는 위와 같다.
두번째 풀 때 다시 생각해보니 어떤 크기의 귤이 몇개있는지 정확하게 매칭될 필요가 없다는 판단이 들었다.
어떤 크기의 귤들이 종류별로 몇번씩 쓰인건지 원하는거지 각 크기별로의 귤이 몇개씩 쓰였는지 요구하는게 아니니까.(물론 Counter를 까먹기도 했다.)

그래서 그냥 각 index별로 (tangerine 리스트에서 2가 나오면 그때마다 arr[1]번에 1씩 더하는 식으로(각 인덱스는 당연하게도 -1씩 해줘야 out of index 에러가 안뜬다.) 만들었다.)

일단 구조를 만들고나서 혹시나 내가 틀린건가 싶어서 다른분들의 소스코드를 보니 다른분들도 기본적인 구조는 비슷하지만 대부분은 내가 리스트로 만든걸 딕셔너리로 만드는것 같았다.

0개의 댓글