💡문제 분석 요약
문제
정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다.
수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 같다. 하지만, 123과 432는 구성이 같지 않다.
입력
첫째 줄에 X가 주어진다. (1 ≤ X ≤ 999999) X는 0으로 시작하지 않는다.
출력
첫째 줄에 결과를 출력한다. 만약 그러한 숫자가 없는 경우에는 0을 출력한다.
💡알고리즘 설계
- permutations으로 해당 숫자들로 구성할 수 있는 모든 숫자의 조합을 구한다.
- 내림차순으로 정렬한다.
- 조합의 숫자들을 하나씩 순회하며, 기존 입력받은 숫자보다 작은 숫자가 있을 경우 그 이전 숫자를 프린트한다.
💡코드
from itertools import permutations
num = list(input())
numbers = list(permutations(num, len(num)))
numbers.sort(reverse=True)
result = [ "".join(n) for n in numbers]
strNum = "".join(num)
answer = 0
for n in result:
if n<=strNum:
break
else:
answer = n
print(answer)
💡 느낀점 or 기억할 정보
모든 조합 구하기: permutations
백트래킹으로도 풀 수 있었을 것 같은데, 시도해보지 못했다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준 24511] queuestack - python (0) | 2025.01.21 |
---|---|
[백준 10837] 동전 게임 - python (0) | 2025.01.19 |
[백준 21921번] 블로그 - python (0) | 2025.01.16 |
[백준 1235] 학생 번호 - python (0) | 2025.01.16 |
[백준 1246] 온라인 판매 - python (0) | 2025.01.14 |