카테고리 없음

[Go] 2164 카드2

_HelloWorld_ 2025. 1. 3. 17:09

Description


Code

package main

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

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

	Que []int
)

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

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

	ret := Que[0]
	Que = Que[1:]

	return ret
}

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

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

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

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

func main() {
	defer wr.Flush() 

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

	// 1 ~ N 까지 큐에 넣음
	for i := 1; i <= N; i++ {
		push(i)
	}

	for size() > 1 {
		// 가장 앞에 있는 카드를 버림
		pop()
		// 가장 앞에 있는 카드를 뒤로 보냄
		push(pop())
	}
	fmt.Fprintln(wr, Que[0])
	return
}

 

  • 문제 상황:
    1부터 N까지 번호가 적힌 카드가 순서대로 큐에 들어감.
    • 가장 위의 카드를 버림.
    • 그다음 위의 카드를 큐의 맨 뒤로 이동.
    • 위 과정을 반복하여 카드가 한 장만 남을 때까지 진행함.
  • 큐 연산 구현:
    • push(x): 큐의 맨 뒤에 정수 x를 추가함.
    • pop(): 큐의 맨 앞에 있는 정수를 제거하고 반환함. 큐가 비어 있으면 -1을 반환함.
    • size(): 큐에 들어 있는 정수의 개수를 반환함.
    • empty(), front(), back(): 각각 큐의 상태와 특정 위치의 정수를 반환함.
  • 알고리즘 흐름:
    1. 1부터 N까지의 숫자를 큐에 차례로 추가.
    2. 큐에 남은 카드가 한 장이 될 때까지 반복:
      • pop()을 호출하여 가장 위의 카드를 버림.
      • pop()으로 얻은 가장 위의 카드를 push()하여 큐의 맨 뒤로 이동.
    3. 큐에 남은 마지막 카드를 출력.
  • 결과 출력:
    큐에 남은 마지막 카드의 번호를 출력함.