Algorithm/Simulation

[Python] SWEA 13428번 숫자 조작

코딩쪼앙 2023. 5. 18. 23:47

문제

 

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