프로그래머스 기능개발(Lv2)

문제

https://programmers.co.kr/learn/courses/30/lessons/42586

초기코드

def solution(progresses, speeds):
    answer = []
    arr = []
    
    for i in range(len(progresses)):
        arr.append((100 - progresses[i]) // speeds[i])
    
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            arr[i+1] = arr[i]
            
    d = {}
    
    for i in arr:
        if i in d:
            d[i] += 1
        
        else:
            d[i] = 1
            
    answer = list(d.values())
    return answer            

초기결과

dict 에서 value값만 가져와 list로 만드는것만 테스트해보고 바로 슈슈슉 작성했는데
하나 뭐지?..

보통 이런경우 굉장히 극단적인 케이스 하나가 안되는것일테니 문제를 다시읽으며 가장 극단적인 상황을 열심히 머릿속으로 돌려본다!!

틀린부분

바로 찾을수 있을줄 알았는데 틀린곳 찾는게 생각보다 오래걸렸다
원인은 남아있는 작업량을 작업속도로 나눈값이 항상 나누어떨어진다고 생각하고 코드를 짜버린것!..

    for i in range(len(progresses)):
        if (100-progresses[i]) % speeds[i] == 0 :
            arr.append((100 - progresses[i]) // speeds[i])
        else :
            arr.append((100 - progresses[i]) // speeds[i] + 1)

그래서 요부분을 수정해주었다.
나누어 떨어지지 않을경우 몫 +1 을 해주어야한다
사실 이건 특정 케이스 누락이 아니라 완전히 잘못된 논리로 짜여진 코드인데
운좋게 1개빼고 나머지 테스트케이스를 통과했던것같다
그래서 오히려 틀린걸 찾아내는데 오래걸린것 같기도?..

테스트케이스 1~2개 맞고 나머지 다 틀렸어도 할말없는코드였다!..

정답

def solution(progresses, speeds):
    answer = []
    arr = []
    
    for i in range(len(progresses)):
        if (100-progresses[i]) % speeds[i] == 0 :
            arr.append((100 - progresses[i]) // speeds[i])
        else :
            arr.append((100 - progresses[i]) // speeds[i] + 1)
            
    
    for i in range(len(arr)-1):
        if arr[i] > arr[i+1]:
            arr[i+1] = arr[i]
            
    d = {}
    
    for i in arr:
        if i in d:
            d[i] += 1
        
        else:
            d[i] = 1
            
    answer = list(d.values())
    return answer            

새로 공부한부분

d = {} 혹은 d = dict()

이렇게 d라는 dictionary가 있을때

answer = list(d.values())

values() 메소드를 사용하여 dictionary의 value값만 불러올수있다.
list로 만들고싶으면 list()로 한번 더 묶어줘야한다!

유사품으로 keys() 메소드도 존재한다.
만약 value값이 아니라 key값으로 구성된 리스트를 만들고싶었으면

list(d.keys())

요렇게 해주면 댄다!!

끝!

좋은 웹페이지 즐겨찾기