Algorithm/Greedy

[python] 프로그래머스 level2. 마법의 엘리베이터

khakhalog 2023. 6. 30. 03:25

문제

https://school.programmers.co.kr/learn/courses/30/lessons/148653

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


접근

10씩 나눈 몫이 0이 될때까지 반복문을 실행한다.

 

반복문 내에서는

  • 1의 자리(10으로 나눈 나머지)가 5보다 큰 경우 & 1의 자리가 5이면서 10의자리가 5인 경우
    10에서 1의 자리를 뺀 값을 answer와 storey에 더해준다.

    ex)
    storey = 955이면
    955 -> 960 -> 1000 -> 0 (10)
    955 -> 950 -> 1000 -> 0 (11)

    55이면
    55 -> 60 -> 100 -> 0 (10)
    55 -> 50 -> 0 (10) 
    위의 경우는 동일하지만,
    965, 955 등 3자리 수 이상일 경우 10의 자리가 5보다 같은 경우에도 더 큰 숫자를 선택해야한다.

  • 1의 자리가 0~4인 경우
    나머지를 answer에 더해준다.
  • 위의 과정을 실행하고나면 storey를 10으로 나눠준다.


코드

def solution(storey):
    answer = 0
    
    while storey:
        div = storey % 10
        if (div == 5 and (storey//10) % 10 >= 5) or div > 5:
            answer += (10-div)
            storey += (10-div)
        else:
            answer += div
        storey //= 10

    return answer

 

'Algorithm > Greedy' 카테고리의 다른 글

[python] HackerRank - Candies  (0) 2023.05.19