정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다.
수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 같다. 하지만, 123과 432는 구성이 같지 않다.
첫째 줄에 X가 주어진다. (1 ≤ X ≤ 999999) X는 0으로 시작하지 않는다.
첫째 줄에 결과를 출력한다. 만약 그러한 숫자가 없는 경우에는 0을 출력한다.
입력 1
156
출력 1
165
import itertools
num = list(input()) # 숫자 입력받기
arr = list(itertools.permutations(num, len(num))) # 파이썬 라이브러리를 활용해 순열 구하기
arr.sort(reverse=True) # 오름차순 정렬
result = [] # 문자열을 숫자열로 합쳐서 저장할 배열 생성
for a in arr: # arr에서 값을 가져오기
result.append("".join(a)) # 튜플을 문자열로 합침
idx = result.index("".join(num)) # 숫자가 있는 인덱스 번호를 찾기
print(result[idx-1] if idx != 0 else 0) # 제일 큰 수가 아니라면 현재보다 바로 큰 값을 출력하고 0을 출력한다.
처음으로 itertools 라이브러리를 활용해 봤는데 코드가 간단해져서 좋은 것 같다.
하지만 직접 알고리즘도 구현해볼 필요가 있는 것 같아서 다음에 순열을 라이브러리의 도움없이 만들어보고 싶다.
[백준/Python] 2789 : 유학 금지 (0) | 2021.06.10 |
---|---|
[백준/Python] 10102 : 개표 (0) | 2021.06.09 |
[백준/Python] 10101 : 삼각형 외우기 (0) | 2021.06.01 |
[백준/Python] 9357 : 패션왕 신해빈 (0) | 2021.05.31 |
[백준/Python] 1357 : 뒤집힌 덧셈 (0) | 2021.05.30 |
댓글 영역