본문 바로가기
Problem Solving/SWEA

[SWEA|파이썬] 13428. 숫자 조작 (D3)

by 청량리 물냉면 2023. 5. 18.
반응형
문제

https://tinyurl.com/2mm8f22b

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

🐍파이썬
T = int(input())
for test_case in range(1, T+1):
    n = list(input())
    min_num, max_num = ''.join(n), ''.join(n)
    for i in range(len(n)-1):
        for j in range(i+1, len(n)):
            if i == 0 and n[j] == "0":	#맨앞자리가 0이 될 경우 아래 코드 실행x
                continue
            n[i], n[j] = n[j], n[i]	#위치 바꾸기
            min_num = min(min_num, ''.join(n))	#위치를 바꾼 수가 기존 min_num보다 작다면 저장
            max_num = max(max_num, ''.join(n))	#위치를 바꾼 수가 기존 max_num보다 크다면 저장
            n[i], n[j] = n[j], n[i]	#원상복귀
    print("#{} {} {}".format(test_case, min_num, max_num))

 

 

다른 풀이 방법

itertools의 combinations를 사용하는 방법

from itertools import combinations
T = int(input())
for test_case in range(1, T + 1):
    n = list(input())
    min_num, max_num = ''.join(n), ''.join(n)
    target = [i for i in range(len(n))] #인덱스를 저장
    
    # 순서에 상관없이 2개의 인덱스를 뽑기
    for index in combinations(target, 2):
        i, j = index
        n[i], n[j] = n[j], n[i] #각 인덱스의 수를 교환
        if n[0] == '0': #첫째자리 수가 0인 경우
            n[i], n[j] = n[j], n[i] #원상복귀
            continue    #아래 코드 건너뛰기
        min_num = min(min_num, ''.join(n))
        max_num = max(max_num, ''.join(n))
        n[i], n[j] = n[j], n[i]
    print("#{} {} {}".format(test_case, min_num, max_num))
반응형