https://www.acmicpc.net/problem/16943
16943번: 숫자 재배치
두 정수 A와 B가 있을 때, A에 포함된 숫자의 순서를 섞어서 새로운 수 C를 만들려고 한다. 즉, C는 A의 순열 중 하나가 되어야 한다. 가능한 C 중에서 B보다 작으면서, 가장 큰 값을 구해보자. C는 0
www.acmicpc.net
문제
주어진 첫번째 숫자로 각 위치의 숫자를 옮겨서 만들 수 있는 숫자 중에 두번째 숫자보다 작은숫자 중 가장 큰 값
입력
첫번째 줄 => 숫자 a와 숫자 b가 공백을 사이에 두고 주어진다.
a, b = input().split()
permutations를 쓰기위해 문자로 받아준다.
풀이
파이썬 라이브러리인 itertools를 이용해서 순열로 풀어준다.
순열을 쓸때는 항상 제한시간과 메모리를 고려해서 써준다.
# 16943번 차이를 최대로
# 파이썬 라이브러리 중에 순열이 있기에 사용
import sys
from itertools import permutations
input = sys.stdin.readline
a, b = input().split()
b = int(b)
maximum = -1
# 순열 사용 a_nums는 이제 a로 만들 수 있는 모든 숫자가 담긴 리스트다.
# permutations( ) 사용 시 a는 ex) a = "1234" 일 경우
# permutations(a)의 일부는('1', '2', '3', '4')의 형태가 된다.
a_nums = []
for i in permutations(a):
a_nums.append(''.join(i))
for num in a_nums:
if num[0] == '0':
continue
num = int(num)
if b > num:
maximum = max(maximum, num)
print(maximum)
출력결과
'백준 > 완전 탐색' 카테고리의 다른 글
[백준] 1644번 소수의 연속합 - 파이썬 (0) | 2022.02.07 |
---|---|
[백준] 2003번 수들의 합 2 - 파이썬 (0) | 2022.02.06 |
[백준] 1806번 부분합 - 파이썬 (0) | 2022.02.06 |
[백준] 1051번 숫자 정사각형 - 파이썬 (0) | 2022.02.05 |
[백준] 1476번 날짜계산 - 파이썬 (0) | 2022.02.05 |