경험의 기록

문제 : https://www.acmicpc.net/problem/11866

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

 

풀이

// [백준] 11866. 요세푸스 문제 0 (Kotlin)
import java.util.*

fun main() = with(System.`in`.bufferedReader()){
    var st = StringTokenizer(readLine())
    val n = st.nextToken().toInt()
    val k = st.nextToken().toInt()
    val queue : Queue<Int> = LinkedList()
    val sb = StringBuffer("<")

    for(i in 1 .. n){
        queue.add(i)
    }

    while(queue.isNotEmpty()){
        // 맨 앞의 원소를 맨 뒤로 보냄
        for(i in 0 until k-1){
            queue.offer(queue.poll())
        }

        // k번째 원소는 뺌
        if(queue.size == 1) sb.append("${queue.poll()}>")
        else sb.append("${queue.poll()}, ")
    }

    println(sb)
}

큐를 활용하여 단순하게

맨 앞의 원소를 맨뒤로 보내는 작업을 반복하다가, k번째 순서일때마다 그 작업이 아닌 삭제 작업을 함으로써

큐를 전부 비울때까지 반복하면 결과를 얻을 수 있다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading