오랜만에 코테 끄적이기 - 광물 캐기[172927]

Moon·2023년 6월 14일
0
post-thumbnail
post-custom-banner

최근에 개발자 친구를 만났는데 회사에서 점심시간이 되면 매일 코테를 한 문제씩 푸는 분이 계시다는 이야길 들었다.

경력이 쌓이셨음에도 꾸준히 무언가를 하루도 빠짐없이 하시는 모습이 대단하다!!

취준을 준비하며 매일 최소 3문제를 풀려고 했지만 면접이 있거나 다른 공부가 쌓이면 자연스레 문제 풀기를 미루기 마련이었다 ㅠ

그렇다고 코테를 아에 안 푼 건 아니지만, 대부분 이미 풀어본 유형들을 다시 만나는 경우가 많아 정리하는 일이 적어졌다.

노션에 혼자 정리를 하다보면, 나만 알아보는 글쓰기가 되는 경우가 많다.

velog에 글을 적으면 (누가 꼭 보는 건 아니지만) 타인을 의식해서 코드든, 글이든 작성하게 된다.

항상 변수명을 적을 때도 내맘대로 적다가, 한 번은 어떤 더 나은 변수명이 있을지, 시간 복잡도를 더 줄일 수 있지는 않는지 (보통은 chatgpt에게 한 번이라도 던져보는게 큰 것 같다) 고민하게 되는 시간이 좋은 것 같다!

그런 의미로 오랜만에 코테 글적기를 해보려고 한다


마주한 문제 : 프로그래머스 광물 캐기

문제를 풀었는데 계속 8번이 틀렸다.. 이유가 뭘까 질문하기를 찾아보다가

처음에 캐치하지 못 했던 부분은

" 곡괭이 갯수가 다 되면, 더 이상 광물을 캐지 않는다 "

였다. 이로 인해 코드 설계가 잘못 되었었는데, 이 부분을 고려하여 코드를 추가하니 쉽게 해결이 되었다!

def solution(picks, minerals):
    
    # 5개씩 묶어서, 가중치가 높은 순으로 정리
    mine, sub_list = [], []
    sum_pick = sum(picks)
    cnt_pick = 0
    
    for mineral in minerals :
        if mineral == 'diamond' :
            sub_list.append(25)
        elif mineral == 'iron' :
            sub_list.append(5)
        else :
            sub_list.append(1)
        
        if len(sub_list) == 5 :
            mine.append(sub_list)
            cnt_pick += 1
            sub_list = []
            
            # 곡괭이가 더 이상 없다면 캘 수 없으므로 break
            if cnt_pick == sum_pick :
                break
            
    # 남는 광물들이 있다면 넣어주기
    if sub_list :
        mine.append(sub_list)
    
    # 다이아몬드, 철, 돌 곡괭이 순으로 사용하기 위해 정렬
    mine.sort(key = lambda x : sum(x))
    
    res = 0
    while mine :
        now = mine.pop()

        # 다이아몬드 곡괭이가 존재한다면
        if picks[0] != 0 :
            picks[0] -= 1
            res += len(now)
            
        # 철 곡괭이가 존재한다면
        elif picks[1] != 0 :
            picks[1] -= 1
            for mineral in now :

                if mineral // 5 == 0 :
                    res += 1
                else :
                    res += mineral / 5
        
        # 돌 곡괭이가 존재한다면
        else :
            picks[2] -= 1
            for mineral in now :
                res += mineral

    return res
        
profile
안녕하세요. Moon입니다!
post-custom-banner

0개의 댓글