[백준] 5619번 - 세 번째

chanyeong kim·2022년 11월 29일
0

백준

목록 보기
187/200
post-thumbnail

📩 출처

문제

서로 다른 자연수 n개 a1, a2, ..., an이 주어진다. 이때, a1, ... an에서 2개를 선택해서 붙여서 새로운 수를 만들 수 있다. 이때, 세 번째로 작은 수를 구하는 프로그램을 작성하시오.

예를 들어, 3과 4를 합치면 34나 43이 된다. 또, a1 = 1, a4 = 11을 합쳐서 111을 만든 경우에, a1a4와 a4a1은 다른 수이다.

입력

첫째 줄에 수의 개수 n(3 ≤ n ≤ 108)이 주어진다. 다음 줄부터 한 줄에 하나씩 ai가 주어진다. (1 ≤ ai ≤ 10000)

출력

세 번째로 작은 수를 출력한다.

👉 생각

  • 먼저 주어지는 수의 배열을 다음 기준으로 정렬한다.
    • 수의 자릿수
    • 수의 크기
  • 정렬한 배열의 크기가 3보다 크다면, 위 배열에서 제일 앞에 4개 수만 뽑고, 크기가 3이라면 그대로 가져간다.
  • 새로운 배열에서 조합으로 나올 수 있는 2개의 수를 가져와서 합친다.
  • 합쳐진 수를 정렬해서 3번째 수를 출력한다.
from itertools import combinations
import sys

n = int(input())
numbers = []
numbers = [int(sys.stdin.readline().rstrip()) for _ in range(n)]
numbers.sort(key=lambda x: (len(str(x)), x))

if len(numbers) > 3:
    numbers = numbers[:4]

numbers = list(combinations(numbers, 2))
check = []
for num1, num2 in numbers:
    check.append(int(str(num1)+str(num2)))
    check.append(int(str(num2)+str(num1)))

check.sort()
print(check[2])

0개의 댓글