문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 풀이
- 숫자 길이가 그다지 길지 않으므로, 모든 인덱스 값을 리스트에 넣은 후, 조합을 사용하여 2개씩 뽑는다.
- 2개씩 뽑은 값의 인덱스들을 바꾼 후, 앞자리가 0이라면 원위치 시키고, 앞자리가 0이 아니라면, 제일 큰 수와 제일 작은 수를 비교하여 대소를 가린 후, 이 값이 더 크다면 max_val에 더 작다면 min_val에 넣는다.
- 비교를 마쳤다면 꼭 다시 바꾼 인덱스끼리 바꿔 원위치 시켜준다 <- 위치를 딱 한 번만 바꿀 수 있으므로
코드
from itertools import combinations
# 입력
t = int(input())
for tc in range(t):
n = list(input())
nums = [i for i in range(len(n))]
max_val = min_val = int(''.join(n))
# 2가지씩 조합 뽑아서 인덱스끼리 바꾸기
for i,j in combinations(nums,2):
n[i],n[j] = n[j],n[i]
# 맨 앞자리 숫자 0이면 원상복귀
if n[0] == '0':
n[i],n[j] = n[j],n[i]
continue
# 비교를 위한 임시변수
tmp = int(''.join(n))
# 최댓값과 최솟값 얻기위해 임시변수와 비교
if max_val < tmp:
max_val = tmp
if min_val > tmp:
min_val = tmp
# 비교 후 원상복귀
n[i],n[j] = n[j],n[i]
print(f'#{tc + 1}',min_val,max_val)'Algorithm > Simulation' 카테고리의 다른 글
| [Python] 백준 2504번 괄호의 값 (0) | 2023.05.25 |
|---|---|
| [Python] 백준 1063번 킹 (0) | 2023.05.24 |
| [Python] SWEA 1228,1230번 암호문1, 암호문3 (0) | 2023.05.16 |
| [Python] SWEA 1216번 회문2 (0) | 2023.05.15 |
| [Python] SWEA 1215번 회문1 (0) | 2023.05.11 |