728x90
문제
문제 링크 : https://www.acmicpc.net/problem/16936
16936번: 나3곱2
나3곱2 게임은 정수 하나를 이용한다. 가장 먼저, 정수 x로 시작하고, 연산을 N-1번 적용한다. 적용할 수 있는 연산은 두 가지 있고, 아래와 같다. 나3: x를 3으로 나눈다. x는 3으로 나누어 떨어져야
www.acmicpc.net
CODE
n = int(input())
num = [int(x) for x in input().split()]
result = []
first_value = num[0]
max_pow = 0
# 첫번째 값 찾기
for i in range(n):
temp = num[i]
pow = 0
while temp % 3 == 0:
temp //= 3
pow += 1
if (pow > max_pow) or (pow == max_pow and num[i] < first_value):
max_pow = pow
first_value = num[i]
result.append(first_value)
# 다음 순서인 수 찾기
for i in range(n):
if result[-1] * 2 in num:
result.append(result[-1] * 2)
continue
if result[-1] % 3 == 0 and result[-1] // 3 in num:
result.append(result[-1] // 3)
continue
break
if len(result) == n:
print(*result)
풀이
- 나3곱2로 정렬된 수열은 오른쪽으로 갈수록 2^n배, 3^-n배 증가한다
- 3의 n승을 약수로 갖는 수들은 오른쪽으로 갈수록 3의 차수가 감소한다
- 같은 n의 3의 n승을 약수로 갖는 수들은 오른쪽으로 갈수록 수가 크다
따라서 정답 수열의 첫 번째 수는 가장 큰 3의 n승을 약수로 갖는 수들 중 가장 작은 수이다
첫 번째 수를 구하고 나면 나3곱2의 법칙에 따라 다음 수들을 구할 수 있다
결과
728x90
'Baekjoon' 카테고리의 다른 글
[BOJ / 백준] 16938번 캠프 준비 파이썬(Python) 문제 풀이 (0) | 2021.07.25 |
---|---|
[BOJ / 백준] 16937번 두 스티커 파이썬(Python) 문제 풀이 (5) | 2021.07.23 |
[BOJ / 백준] 16922번 로마 숫자 만들기 파이썬(Python) 문제 풀이 (0) | 2021.07.21 |
[BOJ / 백준] 16917번 양념 반 후라이드 반 파이썬(Python) 문제 풀이 (0) | 2021.07.20 |
[BOJ / 백준] 16968번 차량 번호판 1 파이썬(Python) 문제 풀이 (0) | 2021.07.20 |