[백준][파이썬] 16943번 숫자 재배치
문제 번호 : 16943
문제 출처 : https://www.acmicpc.net/problem/16943
Code
from itertools import permutations
def to_int(t):
if t[0] != '0':
pos = 10 ** (len(t)-1)
tmp = 0
for i in t:
tmp += int(i) * pos
pos = pos // 10
return tmp
return -1
a, b = input().split()
b = int(b)
c = -1
numbers = list(permutations(a)
for number in numbers:
if number[0] == '0':
continue
num = int(''.join(number)) # to_int(number)
if num < b:
c = max(num, c)
print(c)
Idea
- a를 순열을 사용해서 만들기 편하게 하기 위해서 int형으로 변환하지 않고 문자열로 입력받는다. (문자열도 iterable이기 때문에)
- b는 미리 int형으로 형변환을 한다.
permutations(a)
r 이 생략되었으므로 a의 길이를 인자로 갖는다.- 문자로 이루어져 있는 튜플을 숫자로 변환한다.
- b와 비교해서 작으면 다시 max()로 비교한 후 저장한다.
for 문에서 number 가 튜플 자료형이기 때문에 int(number)를 사용할 수 없어서 처음에는 to_int()라는 함수를 만들어서 사용했다. 그러다가 튜플을 문자열로 바꾸는 방법이 있어서 적용해봤다. 내가 만든 to_int()로 프로그램을 돌렸을 때 시간이 1288ms 가 나왔고 int(''.join(number))
를 사용했을 때 432ms 가 나왔다.
''.join(iterable)
은 iterable 자료형의 값들을 모두 이어붙여서 반환해준다. 값들 사이에 문자를 넣고 싶다면 따옴표 사이에 넣으면 된다. 예를 들어'-'.join(['a', 'b','c'])
라는 함수가 있으면 'a-b-c'를 반환한다.
'프로그래밍 > BAEKJOON' 카테고리의 다른 글
[백준][파이썬] 15683번 감시 (0) | 2021.07.24 |
---|---|
[백준][파이썬] 16637번 괄호 추가하기 (0) | 2021.07.19 |
[백준][파이썬] 16938번 캠프 준비 (0) | 2021.07.18 |
[백준][파이썬] 16937번 두 스티커 (0) | 2021.07.18 |
[백준][파이썬] 16936번 - 나3곱2 (0) | 2021.07.17 |