숫자 조작
풀이
숫자 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}')
'알고리즘 > SWEA' 카테고리의 다른 글
SWEA D3 15612. 체스판 위의 룩 배치 (python) (1) | 2024.02.27 |
---|---|
SWEA D3 6485. 삼성시의 버스 노선 (python) (0) | 2024.02.27 |
SWEA D3 14692. 통나무 자르기 (python) (1) | 2024.02.27 |
SWEA D3 16002. 합성수 방정식 (python) (0) | 2024.02.26 |
SWEA D3 18662. 등차수열 만들기 (python) (1) | 2024.02.26 |