문제링크
- n의 위치가 S(i)에 존재한다고 가정해봅시다.
- S(i)는 S(i - 1) + mooo... + S(i - 1) 을 의미하고,
- n의 위치가 S(i)에 존재한다는 것은 S(i - 1)에는 존재하지 않다는 것을 의미합니다.
- 따라서 S(i)에 존재한다는 것을 알게되었을 때 우리가 고려해야 할 구간은 mooo... + S(i - 1) 구간 입니다.
- 먼저 mooo... 구간에 존재하는 것을 찾기 위해선 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()
val n = bufferedReader.readLine().toInt()
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
val total = baseLength * 2 + mid
if (n > total) {
findNthLetter(n, k + 1, total)
return
}
if (n <= (total - baseLength)) {
if (n - baseLength == 1) bufferedWriter.write("m")
else bufferedWriter.write("o")
} else {
findNthLetter(n - (baseLength + mid), 1, 3)
}
}