코딩테스트/SWEA

[Python, 파이썬] SWEA 13428. 숫자 조작

알코딩 2024. 11. 10. 13:18

정수 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] # 숫자 교환
 

교환해서 최대값 최솟값 검사 한 후 백트래킹을 해서 다음걸 교환하는 식으로 쭉 하면 끝!