본문 바로가기
알고리즘/SWEA

SWEA D3 13428. 숫자 조작 (python)

by 개발하는 호랑이 2024. 2. 27.

숫자 조작

풀이

숫자 2개를 서로 위치만 바꿔서 가장 큰 값과 가장 작은 값을 확인하는 문제다. 안 바꿨을 때 가장 큰 값이거나 가장 작은 값이면 안 바꿔도 된다.
또한 맨 앞자리는 0일 수가 없음도 인식하고 풀면 금방 풀린다.

내가 푼 방식은 완전탐색으로 시도했다.
N = 10^9이지만, 실제로 사용하게 되는 자릿수는 9개이기 때문이다.

그래서 아래처럼 풀었다.
일단 string자체로는 변환을 할 수 없으니, list로 변환해서 숫자 자리를 바꾸는 방법을 이용했다.

그 결과 아래 코드가 생성되었고 문제를 해결했다.

def solution(S):
    global min_value
    global max_value
    for i in range(len(S)-1):
        for j in range(i+1, len(S)):
            if i == 0 and S[j] == '0':
                continue
            else:
                tmp = S[:]
                tmp[i], tmp[j] = tmp[j], tmp[i]
                tmp_s = int(''.join(tmp))
                if tmp_s < min_value:
                    min_value = tmp_s
                elif tmp_s > max_value:
                    max_value = tmp_s
    return

T = int(input())
for testcase in range(1, T+1):
    string = input()
    min_value = int(string)
    max_value = int(string)
    S = list(string)


    solution(S)

    print(f'#{testcase} {min_value} {max_value}')