https://www.acmicpc.net/problem/9440
9440번: 숫자 더하기
강민이가 초등학교 3학년일 때, 담임선생님이 이런 문제를 냈었다. 숫자 1, 2, 7, 8, 9 를 사용해서 만든 두 숫자를 더했을 때, 나올 수 있는 가장 작은 수는 무엇일까요? 강민이는 이 문제의 답이 2
www.acmicpc.net
문제
강민이가 초등학교 3학년일 때, 담임선생님이 이런 문제를 냈었다.
숫자 1, 2, 7, 8, 9를 사용해서 만든 두 숫자를 더했을 때, 나올 수 있는 가장 작은 수는 무엇일까요?
강민이는 이 문제의 답이 207(78 + 129)이라고 생각했다. 그런데 선생님은 책 4페이지에 있는 비슷한 문제를 모두 풀어오라는 숙제를 내셨다.
작년부터 프로그래밍을 시작한 강민이는 이런 숙제보다 코딩을 더 재밌어했다. 그래서 강민이는 이 숙제를 코딩으로 해결하기로 했다!
어린 강민이를 위해 코딩을 도와주자.
입력
한 줄에 하나씩 연습문제가 주어진다.
각 줄에서 첫 번째로 나오는 정수 N (2 ≤ N ≤ 14) 은 연습문제에서 사용될 숫자의 개수이다.
두 번째부터 사용될 N개의 숫자가 주어진다. 0이 아닌 수가 최소 2개 이상 존재한다
마지막 줄에 0을 입력하면 프로그램이 종료된다.
출력
각 연습문제마다 정답을 출력한다.
풀이방법
풀이방법은 간단합니다.
1. 숫자들을 정렬합니다.
-> 정렬해야 작은 수가 큰 자릿수를 차지하기 때문에 덧셈을 했을 때, 작은 수가 나옵니다.
2. 모든 0을 index가 0의 개수 + 2에 해당하는 index에 모두 넣습니다.
3. 숫자의 길이가 짝수인지 홀수인지 구합니다.
3-1. 짝수인 경우 a,b 배열에 맨 앞의 숫자 하나씩 넣습니다.
3-2. 홀수인 경우, a 배열에 0번째 index,를 넣은 뒤, a, b 배열에 번갈아 숫자를 넣습니다.
짝수인 경우
1 3 0 0 2 6
(정렬)
0 0 1 2 3 6
(0을 뒤로 넘김)
1 2 0 0 3 6
a배열 1 0 3, b 배열 2 0 6
-> 309
홀수인 경우
1 3 0 0 0 2 6
(정렬)
0 0 0 1 2 3 6
(0을 뒤로 넘김)
1 2 0 0 0 3 6
a배열 1 0 0 6 b 배열 2 0 3
->1209
코드
import sys
from collections import deque
while True:
arr = deque(map(int, sys.stdin.readline().rstrip().split()))
if arr[0] == 0:
break
arr.popleft()
# 정렬
arr = sorted(arr)
zeros = 0
for i in arr:
if i == 0:
zeros += 1
else:
break
for i in range(zeros):
arr.pop(0)
for i in range(zeros):
arr.insert(2,0)
a, b = [], []
if len(arr)% 2 == 0:
for i in range(len(arr)):
if i % 2 == 0:
a.append(arr[i])
else:
b.append(arr[i])
print(int("".join(map(str,a)))+ int("".join(map(str,b))))
else:
a.append(arr[0])
for i in range(1,len(arr)):
if i % 2 == 1:
a.append(arr[i])
else:
b.append(arr[i])
print(int("".join(map(str,a)))+ int("".join(map(str,b))))
결론
0을 뒤로 넘기는 것, 짝수와 홀수일때 수를 넘기는 것과 str, int 형변환만 잘한다면 바로 풀리는 문제입니다.
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] [C++] 2309번: 일곱 난쟁이 (0) | 2023.11.20 |
---|---|
[BOJ] [Python] 10419번: 지각 (2) | 2023.11.20 |
[BOJ] [Python] 6593번 : 상범 빌딩 (0) | 2023.11.16 |
[BOJ] [Python] 11945번: 뜨거운 붕어빵 (1) | 2023.11.15 |
[BOJ] [Python] 11727번: 2×n 타일링 2 (0) | 2023.11.14 |