https://www.acmicpc.net/problem/9440
풀이 과정
- 그리디 알고리즘 문제인데 처음 생각할 때 꼬여서 어떻게 풀어야 할지 고민을 정말 많이한 문제다ㅜ
- 숫자를 오름차순으로 정렬한다.
- 숫자들로 두개의 정수를 만들어야 하므로 a, b 리스트를 만들어 둔다.
- a, b 리스트에 번갈아가면서 작은 숫자부터 넣어준다.
- a, b 리스트에서 맨 앞에 넣을때는 0이 아닌 수중에 가장 작은 숫자를 넣어주어야 한다.
- 리스트에 채우는 작업이 종료되면, 두 리스트를 정수화하여 더해주면 된다.
- 더해준 값을 출력한다.
소스 코드
import sys
from collections import deque, defaultdict
input = lambda: sys.stdin.readline().rstrip()
while True:
p = list(map(int, input().split()))
numbers = defaultdict(lambda: 0)
if p[0] == 0:
break
for n in p[1:]:
numbers[n] += 1
a = []
b = []
flag = True
for i in range(p[0]):
target = None
if flag:
target = a
else:
target = b
for j in range(10):
if len(target) == 0 and j == 0:
continue
if numbers[j] > 0:
numbers[j] -= 1
target.append(j)
break
flag = not flag
print(int("".join(map(str, a))) + int("".join(map(str, b))))
'알고리즘[Python] > 백준 알고리즘' 카테고리의 다른 글
[ 16918 ] [ 구현 ] 봄버맨 (0) | 2022.01.04 |
---|---|
[ 17352 ] [ Union-Find ] 여러분의 다리가 되어 드리겠습니다 (0) | 2022.01.03 |
[ 17951 ] [ 이분 탐색 ] 흩날리는 시험지 속에서 내 평점이 느껴진거야 (0) | 2021.12.30 |
[ 23843 ] [ Greedy ] 콘센트 (0) | 2021.12.29 |
[ 21276 ] [ 위상 정렬 ] 계보 복원가 호석 (0) | 2021.12.28 |