[프로그래머스] 광물 캐기 - 파이썬/구현

JinUk Lee·2023년 4월 26일
0

프로그래머스

목록 보기
30/46

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



def list_div(lst,n):
    return [lst[i:i+n] for i in range(0,len(lst),n)]

def solution(picks, minerals):
    answer = 0
    sum_gok = sum(picks)

    if len(minerals) > sum_gok * 5:
        minerals = minerals[:sum_gok*5]

    min_5 = list_div(minerals,5)
    mine_list = []
    print(min_5)
    for i in min_5:
        sum_ = 0
        for j in i:
            if j=='stone':
                sum_ += 1
            elif j=='iron':
                sum_ += 5
            else:
                sum_ +=25

        mine_list.append([i,sum_])

    mine_list.sort(key=lambda x:(-x[1]))
    print(mine_list)
    dia,ir,st = picks

    while dia > 0:
        if mine_list:
            elem = mine_list.pop(0)
            for i in elem[0]:
                answer +=1
        dia -=1

    while ir > 0:
        if mine_list:
            elem = mine_list.pop(0)
            for i in elem[0]:
                if i == 'diamond':
                    answer += 5
                else:
                    answer +=1

        ir -= 1

    while st > 0:
        if mine_list:
            elem = mine_list.pop(0)
            for i in elem[0]:
                if i == 'diamond':
                    answer += 25
                elif i == 'iron':
                    answer +=5
                else:
                    answer +=1
        st -= 1

    print(answer)

    return answer

picks = [1,1,0]

minerals =  ["iron", "iron", "diamond", "iron", "stone", "diamond", "diamond", "diamond"]

solution(picks,minerals)

  1. 자원을 곡괭이의 갯수만큼 자른다.

  2. 자원을 5 단위로 나눈다.

  3. 한 단위의 자원을 돌곡괭이 기준으로 총량을 구한다.

  4. 단위 자원의 총량을 내림차순으로 정렬한다.

  5. 앞에서부터 다이아, 철, 돌 곡괭이 순으로 캔다.

문제를 풀면서 처음 배운건데 리스트 슬라이싱은 인덱스를 초과해도 오류가 발생하지 않는다.


A = [1,2,3]
B = A[0:5]

print(B) # [1,2,3]
profile
개발자 지망생

0개의 댓글