1463번: 1로 만들기백준/문제2023. 8. 8. 13:21
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/1463
언어 : Kotlin
문제 설명 :
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
- 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
- 첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.
- 10의 경우에 10 → 9 → 3 → 1 로 3번 만에 만들 수 있다.
제한 사항 :
- 시간 제한 : 0.15초 (하단 참고)
- 메모리 제한 : 128MB
- Python 3: 1.5 초
- PyPy3: 0.7 초
- Python 2: 1.5 초
- PyPy2: 0.7 초
입출력 예 :
입력 | 출력 |
2 | 1 |
10 | 3 |
풀이 :
import java.io.*
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val n = br.readLine().toInt()
val arr = Array(n + 1) { 0 }
for (i in 2 .. n) {
arr[i] = arr[i - 1] + 1
if (i % 2 == 0) arr[i] = arr[i].coerceAtMost(arr[i / 2] + 1)
if (i % 3 == 0) arr[i] = arr[i].coerceAtMost(arr[i / 3] + 1)
}
bw.write("${arr[n]}")
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
9375번: 패션왕 신해빈 (0) | 2023.08.09 |
---|---|
2579번: 계단 오르기 (0) | 2023.08.08 |
17219번: 비밀번호 찾기 (0) | 2023.08.08 |
11399번: ATM (0) | 2023.08.07 |
11047번: 동전 0 (0) | 2023.08.07 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!