leetcode , 백준

[Go] 11866 요세푸스 문제 0

_HelloWorld_ 2025. 1. 3. 17:39

Description


Code

package main

import (
	"bufio"
	"fmt"
	"os"
)

var (
	sc = bufio.NewReader(os.Stdin)
	wr = bufio.NewWriter(os.Stdout)

	Queue []int
)

// 정수 X를 큐에 넣음
func push(x int) {
	Queue = append(Queue, x)
}

// 큐에 가장 앞에 있는 정수를 빼고, 그 수를 출력
func pop() int {
	if len(Queue) == 0 {
		return -1
	}

	ret := Queue[0]
	Queue = Queue[1:]

	return ret
}

// 큐의 정수 개수 출력
func size() int {
	return len(Queue)
}

// 큐의 공백 확인
func empty() int {
	if len(Queue) == 0 {
		return 1
	}
	return 0
}

// 큐의 가장 앞 있는 정수를 출력
func front() int {
	if len(Queue) == 0 {
		return -1
	}
	return Queue[0]
}

// 큐의 가장 뒤에 있는 정수를 출력
func back() int {
	if len(Queue) == 0 {
		return -1
	}
	return Queue[len(Queue) - 1]
}

func main() {
	defer wr.Flush() 

	var N, K int
	fmt.Fscanln(sc, &N, &K)

	// N 개의 배열 
	for i := 1; i <= N; i+= 1 {
		push(i)
	}
	
	fmt.Fprint(wr, "<")
	for len(Queue) > 0 {
		for i := 0; i < K - 1; i++ {
			push(pop())
		}

		fmt.Fprint(wr, front())
		if len(Queue) != 1 {
			fmt.Fprint(wr, ", ")
		}
		pop()
	}
	fmt.Fprint(wr, ">")
	return
}

 

  • 문제 정의:
    1부터 N까지의 사람들이 원형으로 앉아 있음.
    • K번째 사람을 제거하는 과정을 반복하며, 최종적으로 제거된 순서를 출력.
  • 큐 초기화:
    • 1부터 N까지의 숫자를 큐에 차례로 삽입.
  • K번째 제거:
    • 앞에서 K-1개의 정수를 pop()하여 다시 push()함.
    • K번째 정수를 제거하고 결과에 저장.
  • 결과 출력:
    • <와 >로 묶어 최종적으로 제거된 순서를 출력.
    • 숫자 간에는 , 로 구분.

 

 

'leetcode , 백준' 카테고리의 다른 글

[Go] 2346 풍선 터뜨리기  (0) 2025.01.08
[Go] 28279 덱 2  (0) 2025.01.07
[Go] 18258 큐 2  (0) 2025.01.03
[Go] 4949 균형잡힌 세상  (0) 2025.01.03
[Go] 10773 제로  (0) 2025.01.03