상세 컨텐츠

본문 제목

[백준/Python] 2992 : 크면서 작은 수

코딩테스트/백준

by 기며니 2021. 6. 7. 15:09

본문

728x90
728x90

💚 문제 설명

정수 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 라이브러리를 활용해 봤는데 코드가 간단해져서 좋은 것 같다.

하지만 직접 알고리즘도 구현해볼 필요가 있는 것 같아서 다음에 순열을 라이브러리의 도움없이 만들어보고 싶다.

728x90
728x90

관련글 더보기

댓글 영역