[白俊5904-Kotlin]Mooゲーム
7948 ワード
質問リンク nの位置がS(i)に存在すると仮定する. S(i)はS(i-1)+moo...S(i-1)、 を表す nの位置はS(i)にあり、これはS(i−1)が存在しないことを意味する. そのため、S(i)に存在することを知ったとき、私たちが考慮しなければならない区間はmooo...+S(i-1)区間. 先moo...セクションに存在するコンテンツを検索するには、nが(S(i)の長さ-S(i-1)の長さ)以下である場合の条件を決定する必要があります. nの位置がS(i−1)区間に存在する場合、S(i−1)区間を起点としてnの相対位置を変更し、最初から変更したnが存在する区間を再検索する.
import java.io.BufferedReader
import java.io.BufferedWriter
private lateinit var bufferedReader: BufferedReader
private lateinit var bufferedWriter: BufferedWriter
fun main() {
bufferedReader = System.`in`.bufferedReader()
bufferedWriter = System.out.bufferedWriter()
// 1. get n
val n = bufferedReader.readLine().toInt()
// 2. print Nth letter
findNthLetter(n, 1, 3)
bufferedReader.close()
bufferedWriter.close()
}
fun findNthLetter(n: Int, k: Int, baseLength: Int) {
if (n == 1) {
bufferedWriter.write("m")
return
}
if (n == 2 || n == 3) {
bufferedWriter.write("o")
return
}
val mid = k + 3 //◀ o는 (k + 2)개 이고, m 까지 포함하면 (k + 3)을 해주어야 합니다.
val total = baseLength * 2 + mid
if (n > total) {
findNthLetter(n, k + 1, total)
return
}
// moomooomoo 일 때, n의 위치가 mooo에 위치하는지 확인하는 조건문 입니다.
if (n <= (total - baseLength)) {
if (n - baseLength == 1) bufferedWriter.write("m")
else bufferedWriter.write("o")
} else {
// n의 위치가 뒤에 있는 moo에 위치할 때, n의 상대적 위치를 변경시키고 처음부터 재귀를 시작합니다.
findNthLetter(n - (baseLength + mid), 1, 3)
}
}
Reference
この問題について([白俊5904-Kotlin]Mooゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@kldaji/백준-5904-Kotlin-Moo-게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol