문제 출처:https://school.programmers.co.kr/learn/courses/30/lessons/14865
풀이:
틀린풀이
def solution(storey):
arr =[ int(i) for i in str(storey)]
count = 0
while len(arr) > 0:
number = arr.pop()
if number > 5:
count += 10 - number
next_number = arr.pop()
next_number += 1
arr.append(next_number)
else: count += number
return count
38.5 / 100
def solution(storey):
arr =[ int(i) for i in str(storey)]
count = 0
while len(arr) > 0:
number = arr.pop()
if number > 5:
if len(arr) == 0:
count += (10 - number) + 1
break
else:
count += 10 - number
next_number = arr.pop()
next_number += 1
arr.append(next_number)
elif number == 5:
next_number = arr.pop()
if next_number < 5:
count += number
arr.append(next_number)
else:
count += number
arr.append(next_number+1)
else: count += number
return count
92.3 / 100
9번 케이스가 런타임 오류가 나온다.
아랫 부분 추가 하니 해결
elif number == 5:
if len(arr) == 0:
count += 5
break
마지막자릿수 숫자에 집중한다 .
만약에 1234이면 내림이 좋고 6789면 올림이 좋다.
근데 5일 경우에는 앞자리수가 1234 일때 내리는게 좋고 56789 일때는 올림이 좋다 숫자로 예를들면
45 는 40 + 5 가 가장 베스트 방법이여서 4+ 5 = 9
65는 100- 30(한개 올림해서) - 5 가 좋다 1 + 3 + 5 여서 9 이다
이거를 식으로 나타나면 이렇다
arr 에서 한 개를 pop해주고
1. 5보다클때
if number > 5:
if len(arr) == 0:
print(number,arr,count)
count += (10 - number) + 1
break
만약 5보다 크면서 계산할 arr가 없는경우 >> 올림을 해주면 되기 때문에 만약 67 일때 마지막 자릿수는
(10-7 (6인데 7에서 올림해서 1개 올라옴) ) = 3
그리고 10 에서 7을 # 10을 사용 했으므로 1을 더해줘야한다 . 그리고 그 이프문 종료
else:
count += 10 - number
next_number = arr.pop()
next_number += 1
arr.append(next_number)
만약 더 계산해야 할 arr가 남는경우
10 에서 숫자를 빼주고 자릿수 올림했으니깐 그 다음 숫자를 뽑아서 +1 을 해준다음에 다시 넣어준다.
2. 5일때
이제 number가 5일 때 앞 자리에 숫자를 확인해야한다.
만약 5 미만일때, 5이상일때, 더 이상 계산할 arr가 남지 않았을때 세가지로 나눈다.
2-1. 더 이상 계산할 arr가 남지 않은경우
elif number == 5:
if len(arr) == 0:
count += 5
break
그냥 5 더해주고 이프문 끝낸다.
아닐 경우 뽑아준다
next_number = arr.pop()
2-2. 5 미만일때
if next_number < 5:
count += number
arr.append(next_number)
다음 숫자가 5 미만이면 그냥 내림 해주면 되기 때문에 number를 arr에 추가
2-3. 5이상일때
else:
count += number
arr.append(next_number+1)
올림해야하니깐 앞 자릿수 에 +1 하고 arr에 추가
3. 5이하일때
else:
count += number
내림이니깐 그냥 더해주면됨
올림일때와, 5일때를 잘 풀어야 하는 문제이다.
댓글