정수 N에서 최대 한번 교환 하여 새로운 수 M을 만들 수 있다 할 때 M의 최대값과 최솟값은?
T = int(input()) # 테스트케이스의 개수 T
for test_case in range(1, T+1):
N = list(input()) # 정수 N
length = len(N) # 숫자 N의 길이
mMax = 0 # 최대
mMin = 10**10 # 최소
for i in range(length):
for j in range(i, length):
if not (N[j] == '0' and i == 0): # 첫번째 숫자랑 교환하는데, 그 값이 0이 아닐 때
N[i], N[j] = N[j], N[i] # 숫자 교환
now = int(''.join(N)) # 현재값
mMax = max(now, mMax) # 최대값 갱신
mMin = min(now, mMin) # 최소값 갱신
N[i], N[j] = N[j], N[i] # 백트래킹
if(int(''.join(N))==0): mMin = 0 # N이 0일 때 0으로 설정
print("#%d %d %d" %(test_case, mMin, mMax))
[문제풀이]
모든 숫자를 다 교환해서 최대값과 최솟값을 찾으면 된다.
단, 첫번째 숫자랑 교환하는 수가 0이 아닐때만!
N[i], N[j] = N[j], N[i] # 숫자 교환
교환해서 최대값 최솟값 검사 한 후 백트래킹을 해서 다음걸 교환하는 식으로 쭉 하면 끝!
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1228. [S/W 문제해결 기본] 8일차 - 암호문1 (0) | 2024.11.10 |
|---|---|
| [Python, 파이썬] SWEA 1210. [S/W 문제해결 기본] 2일차 - Ladder1 (0) | 2024.11.10 |
| [Python, 파이썬] SWEA 3282. 0/1 Knapsack (0) | 2024.11.10 |
| [Python, 파이썬] SWEA 1493. 수의 새로운 연산 (1) | 2024.10.22 |
| [Python, 파이썬] SWEA 2819. 격자판의 숫자 이어 붙이기 (1) | 2024.10.22 |