프로그래머스 - 마법의 엘리베이터 (파이썬)
글 작성자: pental

분류 : 그리디
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/148653
풀이
엘리베이터가 버튼을 눌러 층을 이동하는데,
위층으로 1칸, 아래층으로 1칸 이동이 가능하고, +10, +100 등도 가능하다.
목표층에서 0층으로 이동하는 최소 버튼 횟수를 구하는 문제이다.
즉, 각 자릿수를 기준으로 반올림 또는 내림하여 효율적인 방법으로 움직이는 그리디 알고리즘 문제이다.
while storey > 0 : digit = storey % 10 next_digit = (storey // 10) % 10
현재 숫자를 1의 자리부터 확인하면서, 다음 자릿수가 4 이상인지 여부에 따라 반올림 할지 내릴지 결정한다.
if digit > 5 or (digit == 5 and next_digit >= 5) : answer += 10 - digit storey += 10 # 올림 → 다음 자리수에 영향
예룰 들어 7인경우 +3을 눌러서 10으로 올리고, 다음 자리에 반영하고,
5인데 다음 자릿수가 6이면 올리는게 유리하기에 마찬가지로 올림처리를 진행한다.
else : answer += digit # 그대로 내려가면 됨
내리는 경우에는 그냥 3번 아래로 누르고 끝
코드
def solution(storey): answer = 0 while storey > 0 : digit = storey % 10 next_digit = (storey // 10) % 10 if digit > 5 or (digit == 5 and next_digit >= 5) : answer += 10 - digit storey += 10 else : answer += digit storey //= 10 return answer
이 글은
본 저작자 표시, 비영리 규칙 하에 배포할 수 있습니다. 자세한 내용은 Creative Commons 라이선스를 확인하세요.
Creative Commons
본 저작자 표시
비영리
'Programming > 프로그래머스' 카테고리의 다른 글
프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬) (0) | 2025.04.02 |
---|---|
프로그래머스 - 배달 (파이썬) (0) | 2025.03.30 |
프로그래머스 - 택배 상자 꺼내기 (파이썬) (0) | 2025.03.26 |
[프로그래머스] 달리기 경주 (2) | 2025.03.24 |
[프로그래머스/JAVA] 프로그래머스 문제 모음 (0) | 2021.11.02 |
댓글
이 글 공유하기
다른 글
-
프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)
프로그래머스 - [Level 2] 숫자 카드 나누기 (파이썬)
2025.04.02https://school.programmers.co.kr/learn/courses/30/lessons/135807 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이두 배열이 주어졌을 떄, 한 배열의 모든 수를 나누면서 다른 배열의 어떤 수로도 나누어지지 않는 수중에서 최대값을 찾는 문제이다.내가 접근한 방식은 다음과 같다.두배열 arrayA, arrayB가 주어지고,x는 arrayA의 모든 원소를 나눌수 있어야한다.x는 arrayB의 어떤 원소도 나눌 수 없어야한다.또는 반대로 x는 arrayB의 모든 원소를 나눌 수 있어야한다.x는 arrayA의 어떤 원소도 나눌 수 없어야한다.from math i… -
프로그래머스 - 배달 (파이썬)
프로그래머스 - 배달 (파이썬)
2025.03.30https://school.programmers.co.kr/learn/courses/30/lessons/12978 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이N개의 마을(1번부터 N번), roads는 [마을 A, 마을 B, 걸리는 시간] 형태의 리스트고, 음식 배달은 1번 마을에서 시작한다.K시간 이하로 배달 가능한 마을 수를 구해야한다.1번 마을을 시작점으로 해서 모든 마을까지의 최단 거리를 구한다. 여기서는 다익스트라 알고리즘을 사용한다.구한 거리 중에서 K이하인 마을 개수를 세면 정답이다.시간 복잡도 분석도로수 E, 마을 수 N즉, O((N + E) Log N)코드import heapqfr… -
프로그래머스 - 택배 상자 꺼내기 (파이썬)
프로그래머스 - 택배 상자 꺼내기 (파이썬)
2025.03.26https://school.programmers.co.kr/learn/courses/30/lessons/389478?language=python3 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이다른 사람 풀이를 보고 한숨을 쉬었던 문제이다…def solution(n, w, num): m1 = num%(w*2) m2 = ((w*2+1) - m1)%(w*2) # num 이상 n 이하의 수들 중 2*w로 나눈 나머지가 m1,m2인 것들의 수를 세면 된다. return len(range(num,n+1,w*2)) + len(range(num + (m2-m1)%(w*2), n+1, w*2… -
[프로그래머스] 달리기 경주
[프로그래머스] 달리기 경주
2025.03.24
댓글을 사용할 수 없습니다.