본문 바로가기
프로그래머스/2단계

(Python/Lv2)마법의 엘리베이터

by windy7271 2023. 1. 1.
728x90
반응형

문제 출처: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일때를 잘 풀어야 하는 문제이다.

 

반응형

댓글