Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

우주에서 글을 적어본다

99클럽 코테 스터디 39일차 TIL + 그리디(Greedy) 본문

항해99 TIL

99클럽 코테 스터디 39일차 TIL + 그리디(Greedy)

우주로 날아간 사람 2024. 8. 30. 03:17

[오늘의 학습 키워드 및 문제]
- 프로그래머스의 "광물 캐기" 문제를 풀었다.
- 오늘 주제는 어제와 마찬가지로 그리디(Greedy)다. 
- ^^...;;

[나의 코드]

def solution(picks, minerals):
    sum = 0
    for x in picks:
        sum += x
    
    # 캘 수 있는 광물의 개수
    num_min = sum * 5
    if len(minerals) > num_min: # 주어진 광물이 캘 수 있는 광물 수보다 크면
        minerals = minerals[:num_min]
        
    # 광물 조사
    cnt_min = [[0, 0, 0]for x in range(10)] # dia, iron, stone
    for i in range(len(minerals)):
        if minerals[i] == 'diamond': 
            cnt_min[i//5][0] += 1
        elif minerals[i] == 'iron': 
            cnt_min[i//5][1] += 1
        else : 
            cnt_min[i//5][2] += 1

    # 피로도가 높은 순서대로 광물 정렬
    sorted_cnt_min = sorted(cnt_min, key = lambda x: (-x[0], -x[1], -x[2]))
    
    # 피로도 계산
    answer = 0
    for mineral in sorted_cnt_min:
        d, i, s = mineral
        for p in range(len(picks)):
            if p == 0 and picks[p]>0: # dia 곡괭이
                picks[p]-=1
                answer += d + i + s
                break
            elif p == 1 and picks[p]>0: # iron 곡괭이
                picks[p]-=1
                answer += 5*d + i + s
                break
            elif p == 2 and picks[p]>0: # stone 곡괭이
                picks[p]-=1
                answer += 25*d + 5*i + s
                break
                
    return answer

설명은 나중에 덧붙일 예정이니 그냥 보지 마세요.

[오늘의 회고]
- 스터디가 이제 얼마 남지 않았다. 섭섭한데 홀가분하다.
- 뭔가 불안한데 웃음이 세어나오는 것은 어떤 증상인가? 끝!