프로그래머스 기능개발(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())
요렇게 해주면 댄다!!
끝!
Author And Source
이 문제에 관하여(프로그래머스 기능개발(Lv2)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kjo1130/프로그래머스-기능개발Lv2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)