[TIL_Carrotww] 106 - 23/03/30

μœ ν˜•μ„Β·2023λ…„ 3μ›” 30일
0

TIL

λͺ©λ‘ 보기
121/138
post-thumbnail

πŸ“Carrotww의 μ½”λ”© 기둝μž₯

🧲 python algorithm

πŸ” programmers - 광물캐기 Level2

그리디 λ¬Έμ œμ΄λ‹€ 닀이아가 λ§Žμ€ μˆœμ„œλŒ€λ‘œ 광물을 캐주면 λœλ‹€
λ‚˜λŠ” 닀이아 μ²  λŒμ— κ°€μ€‘μΉ˜λ₯Ό λ‘¬μ„œ μ–΄λ–€κ±Έ λ¨Όμ € μΊ˜μ§€ μ •ν•΄μ£Όμ—ˆλŠ”λ° κ°€μ€‘μΉ˜μ— λ”°λΌμ„œ ν’€λ¦¬λŠ” ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€κ°€ 있고 μ•ˆλ˜λŠ” μΌ€μ΄μŠ€κ°€ μžˆλ‹€.
문제λ₯Ό λ‹€μ‹œ κΉ”λ”ν•˜κ²Œ ν’€μ–΄μ„œ μ˜¬λ €μ•Όκ² λ‹€.

  • λ‚΄ 풀이
def solution(picks, minerals):
    result = 0

    minerals = minerals[:sum(picks)*5]
    slice_min = []

    def count_mineral(min_list):
        result = 0
        check_dict = {"diamond" : 15, "iron" : 5, "stone" : 1}
        for val in min_list:
            result += check_dict[val]

        return result

    cnt = 0
    tmp = []
    for mine in minerals:
        tmp.append(mine)
        cnt += 1
        if cnt == 5:
            weight = count_mineral(tmp)
            slice_min.append([weight, tmp])
            tmp = []
            cnt = 0

    if tmp:
        weight = count_mineral(tmp)
        slice_min.append([weight, tmp])

    slice_min.sort(key=lambda x:x[0])

    iron_graph = {"diamond" : 5, "iron" : 1, "stone" : 1}
    stone_graph = {"diamond" : 25, "iron" : 5, "stone" : 1}

    for i in range(3):
        for x in range(picks[i]):
            if slice_min:
                if i == 0:
                    mineral_list = slice_min.pop()[1]
                    result += len(mineral_list)
                elif i == 1:
                    mineral_list = slice_min.pop()[1]
                    for mineral in mineral_list:
                        result += iron_graph[mineral]
                else:
                    mineral_list = slice_min.pop()[1]
                    for mineral in mineral_list:
                        result += stone_graph[mineral]
            else:
                return result

    return result

첫 번째 풀이인데 더 κΉ”λ”ν•˜κ²Œ λ‹€λ“¬μ–΄μ„œ λ‹€μ‹œ μ˜¬λ €μ•Όκ² λ‹€.
그리디 λ¬Έμ œλŠ” 더 λ‚˜μ€ 방법이 μ—†μ„κΉŒ ν•˜λ©΄μ„œ μ‹œκ°„μ΄ μ’€ κ±Έλ¦¬λŠ”κ²ƒκ°™λ‹€.
사싀 μ‰¬μš΄ 그리디 λ¬Έμ œλŠ” λΈŒλ£¨νŠΈν¬μŠ€λž‘ 체감상 별 λ‹€λ₯Όκ²Œ μ—†κΈ°λŠ” ν•œλ°... 더 λ‚˜μ€ 방법이 μ—†μ„κΉŒ ν•˜λŠ” 곳에 μ‹œκ°„μ„ νˆ¬μžν•˜λ‹€λ³΄λ‹ˆ μ½”λ”©ν…ŒμŠ€νŠΈμ— 그리디 λ¬Έμ œκ°€ λ‚˜μ˜€λ©΄ μ’€ μ§œμ¦λ‚œλ‹€ γ… 
μ•„λ¬΄νŠΌ μš”μ¦˜ velog μ˜¬λ¦¬λŠ”κ±Έ 맀번 μ˜¬λ¦¬μ§€ μ•Šκ³  μ„ νƒμ μœΌλ‘œ μ˜¬λ¦¬λŠ”λ° λ‹€μ‹œ μ§‘μ€‘ν•΄μ„œ 맨날 μ˜¬λ €μ•Όκ² λ‹€~~!!

profile
Carrot_hyeong

0개의 λŒ“κΈ€