카테고리 없음
[백준] 2292: 크면서 작은 수(python)
Bull_
2024. 11. 25. 20:27
https://www.acmicpc.net/problem/2992
문제
정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다.
수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 같다. 하지만, 123과 432는 구성이 같지 않다.
입력
첫째 줄에 X가 주어진다. (1 ≤ X ≤ 999999) X는 0으로 시작하지 않는다.
출력
첫째 줄에 결과를 출력한다. 만약 그러한 숫자가 없는 경우에는 0을 출력한다.
def next_greater_number(X):
# string을 각 자리수 리스트로 변환
digits = list(str(X))
n = len(digits)
i = n - 2
# 반전 구간 찾기 (혹은 증가 부분, 오른쪽부터 읽어야함(최초))
while i >= 0 and digits[i] >= digits[i + 1]:
i -= 1
# digit[i] = 5, i = 1
# print("i",digits[i])
if i == -1:
return 0
# 하강 구간에서 반전구간의 시작점보다 낮아지는 부분 (오른쪽부터 읽어야함(최초))
j = n - 1
while digits[j] <= digits[i]:
j -= 1
# digit[j] = 6, j = 2
# print("j",digits[j])
# 서로 위치를 바꿔줌
# 5 <-> 6
# 156 -> 165
digits[i], digits[j] = digits[j], digits[i]
# print("swap",digits)
# [::-1] 역순 -> 16 + 5(reverse)
digits = digits[:i + 1] + digits[i + 1:][::-1]
# print("digits[:i + 1]",digits[:i + 1])
# print("digits[i + 1:][::-1]",digits[i + 1:][::-1])
# print("reverse",digits)
return int(''.join(digits))
X = int(input())
result = next_greater_number(X)
print(result)