문제
https://www.acmicpc.net/problem/9440
풀이
주어진 숫자를 오름차순으로 정렬한 후, 앞에서부터 하나씩 순서대로 num1과 num2로 나누어주었다.
예를 들어 [3, 4, 2, 2, 2, 2]가 주어졌을때 오름차순으로 정렬하면 [2, 2, 2, 2, 3, 4]이고, 앞에서부터 하나씩 num1과 num2로 나누어준다면 결과는 다음과 같다.
num1 = [2, 2, 3]
num2 = [2, 2, 4]
따라서 정답은 223 + 224 = 447이다.
이때 주어진 숫자에 0이 포함된 경우, 두 정수는 0으로 시작하면 안된다는 것에 유의해야 한다.
예를 들어 [0, 1, 2, 3, 4, 0, 1, 2, 3]이 주어졌다면, 오름차순으로 정렬 시 [0, 0, 1, 1, 2, 2, 3, 3, 4]이고, 앞에서부터 num1과 num2로 나누어주면 다음과 같은 결과가 나온다.
num1 = [0, 1, 2, 3, 4]
num2 = [0, 1, 2, 3]
이 경우를 해결하기 위해 먼저 0을 제외한 숫자들을 num1과 num2로 나누어주고, 마지막에 0을 앞에서부터 두 번째 자리에 끼워넣는 방식으로 접근했다.
이렇게 하면 [0, 1, 2, 3, 4, 0, 1, 2, 3]에서 0을 제외하고 오름차순으로 정렬한 [1, 1, 2, 2, 3, 3, 4]를 num1 = [1, 2, 3, 4], num2 = [1, 2, 3]으로 나누어 준 후, 0을 두 번째 자리에 끼워넣어 num1 = [1, 0, 2, 3, 4], num2 = [1, 0, 2, 3]으로 만들 수 있다.
while True :
N, *nums = map(int, input().split())
if not nums :
break
# nums에 포함된 0의 개수 세기
count = nums.count(0)
nums.sort() # 오름차순 정렬
num1 = []
num2 = []
for i in range(count, N) : # nums[count:]는 모두 0이 아닌 정수
if i % 2 == 0 :
num1.append(nums[i])
else :
num2.append(nums[i])
# 0 끼워주기
for _ in range(count) :
# 길이가 더 짧은 숫자에 0이 들어가야 가장 작은 수를 만들 수 있음
if len(num1) < len(num2) :
num1.insert(1, 0)
elif len(num1) > len(num2) :
num2.insert(1, 0)
else : # num1과 num2의 길이가 같은 경우, 큰 자리수의 숫자가 작은 수에 0이 들어가야 함
if num1 > num2 :
num2.insert(1, 0)
else :
num1.insert(1, 0)
print(int(''.join(map(str, num1))) + int(''.join(map(str, num2))))