반응형
[Silver II] 세 번째 - 5619
성능 요약
메모리: 30840 KB, 시간: 372 ms
분류
브루트포스 알고리즘(bruteforcing), 구현(implementation), 수학(math)
문제 설명
서로 다른 자연수 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)
출력
세 번째로 작은 수를 출력한다.
from itertools import permutations
n = int(input())
answer = []
for i in range(n):
answer.append(int(input()))
answer.sort()
ans = []
a = list(permutations(answer[:4], 2))
for i in a:
ans.append(int(str(i[0])+str(i[1])))
ans.sort()
print(ans[2])
세 번째로 작은 수를 구하려면 오름차순으로 정렬 후, 2개씩 순열로 뽑아서 다시 정렬 후, 3번째 값을 찾아주면 해결.
여기서 n의 범위가 10^8까지인데 서로 다른 자연수를 뽑아와야하고, a는 10000이하인 범위를 봐서는 n이 10^8까지 갈 일은 없다고 생각하고 풀어야 하는 것 같다.
'알고리즘' 카테고리의 다른 글
[프로그래머스][level 1] 나머지가 1이 되는 수 찾기 - 87389 (1) | 2022.09.14 |
---|---|
[Silver III] 빈도 정렬 - 2910 (정렬,딕셔너리) (1) | 2022.09.13 |
[Silver III] 숫자 야구 - 2503(구현, 순열) (1) | 2022.09.11 |
[Silver III] 달팽이 - 1913 (구현) (1) | 2022.09.10 |
[Silver IV] 수들의 합 2 - 2003 (두 포인터) (2) | 2022.09.09 |