반응형
```
백준 2164번 카드 2 Kotlin 구현해보기
```
이번 글을 통해 배워갈 내용
- 백준 2164번 카드2 풀이
https://www.acmicpc.net/problem/2164
2164번: 카드2
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가
www.acmicpc.net
백준 2164번 카드2는
난이도 실버 등급의 문제로서
숫자 N을 입력받고
N장의 1부터 N까지의 카드가 오름차순으로 있다고 가정할 때
처음 카드를 버리고 두 번째 카드를 맨뒤로 버리는 동작을 카드가 한 장 남을 때까지 반복하면
마지막 카드를 구하면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
N을 순서대로 구하다 보면
공식을 발견할 수 있습니다.
해당되는 공식을 이용해서 출력하였습니다.
(n - (n 보다 작은 가장 큰 2의 제곱수)) * 2
import kotlin.math.ln
import kotlin.math.pow
fun main(args: Array<String>) {
val n = readln().toInt()
print("${findLastCard(n)}")
}
fun findLastCard(n: Int): Int {
return if (n != 1 && n != 2) {
(n - highestPowerOf2(n)) * 2
} else {
n
}
}
// 2 ^ 1 부터 시작해서
// 인자로 주어진 n 보다 작은 가장 큰 2의 제곱수를 찾음
fun highestPowerOf2(n: Int): Int {
val numPowEq = 2.0.pow((ln(n.toDouble()) / ln(2.0)).toInt().toDouble()).toInt()
return if (n == numPowEq) {
numPowEq / 2
} else {
numPowEq
}
}
// https://codemasterkimc.tistory.com/
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
반응형
'Kotlin > Kotlin 알고리즘' 카테고리의 다른 글
백준 2644번 촌수계산 Kotlin 구현해보기 (0) | 2022.10.24 |
---|---|
백준 3733번 Shares Kotlin 구현해보기 (0) | 2022.10.19 |
백준 8437번 Julka Kotlin 구현해보기 (0) | 2022.10.08 |
백준 20154번 이 구역의 승자는 누구야?! Kotlin 구현해보기 (0) | 2022.10.08 |
백준 25277번 Culture shock (0) | 2022.10.05 |