```
백준 10845번 큐 Go 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 10845번 큐 풀이
- 간단한 큐 연습
https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
백준 10845번은
난이도 실버 등급의 문제로서
큐를 구현하면 되는 문제입니다.
큐는 FIFO으로서
말 그대로 먼저 들어온 게 먼저 나가는 자료구조입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
Push, Pop, size, empty, front, back 등의 명령어에 따라
아래에 구현된 Switch문과 Que 구조체의 함수를 연결해서
풀었습니다.
개인적으로는 List container를 que처럼 쓰는 것을 편하다 느끼지만
연습 삼아서 큐 자료구조를 한번 만들어 보았습니다.
전체 코드는 다음과 같습니다
package main
import (
"bufio"
"fmt"
"os"
)
// Que
type Que [] int64
func NewQue(cap int) *Que {
que := make(Que, 0, cap)
return &que
}
func (que *Que) Push(elem int64){
*que = append(*que, elem)
}
func (que *Que) Pop() int64{
poppedElem := (*que)[0]
*que = (*que)[1:]
return poppedElem
}
func (que *Que) Front() int64{
return (*que)[0]
}
func (que *Que) Back() int64{
return (*que)[len(*que)-1]
}
func (que *Que) Len() int{
return len(*que)
}
func (que *Que) isEmpty() bool{
isEmpty := true
if(len(*que) > 0){
isEmpty = false
}
return isEmpty
}
func processCommand(que *Que, commandStr *string, commandNum int64) string{
var retStr string = ""
switch *commandStr {
case "push":
{
que.Push(commandNum)
}
case "pop":
{
if(que.isEmpty()){
retStr = "-1"
}else{
retStr = fmt.Sprintf("%v", que.Pop())
}
}
case "size":
{
retStr = fmt.Sprintf("%v", que.Len())
}
case "empty":
{
if(que.isEmpty()){
retStr = "1"
}else{
retStr = "0"
}
}
case "front":
{
if(que.isEmpty()){
retStr = "-1"
}else{
retStr = fmt.Sprintf("%v", que.Front())
}
}
case "back":
{
if(que.isEmpty()){
retStr = "-1"
}else{
retStr = fmt.Sprintf("%v", que.Back())
}
}
}
return retStr
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
que := NewQue(2)
var numberOfCommands int
fmt.Fscanln(reader, &numberOfCommands)
for i := 0; i < numberOfCommands; i++ {
var commandStr string
var commandNum int64
fmt.Fscanln(reader, &commandStr, &commandNum)
outputStr := processCommand(que, &commandStr, commandNum)
if(outputStr != ""){
fmt.Fprintln(writer, outputStr)
}
}
writer.Flush()
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
참조 및 인용
Introduction to Algorithms
A Tour of Go
tour.golang.org
https://tour.golang.org/moretypes/13
A Tour of Go
tour.golang.org
https://stackoverflow.com/questions/2818852/is-there-a-queue-implementation
Is there a queue implementation?
Can anyone suggest Go container for simple and fast FIF/queue, Go has 3 different containers: heap, list and vector. Which one is more suitable to implement a queue?
stackoverflow.com
'Go > Go 알고리즘' 카테고리의 다른 글
백준 10829번 이진수 변환 Go 구현해보기 (0) | 2021.11.07 |
---|---|
백준 10824번 네 수 Go 구현해보기 (0) | 2021.11.07 |
백준 10828번 스택 Go 구현해보기 (0) | 2021.11.07 |
백준 10991번 별찍기-16 Go 구현해보기 (0) | 2021.11.07 |
백준 2948번 2009년 Go 구현해보기 (0) | 2021.11.06 |
```
백준 10845번 큐 Go 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 10845번 큐 풀이
- 간단한 큐 연습
https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
백준 10845번은
난이도 실버 등급의 문제로서
큐를 구현하면 되는 문제입니다.
큐는 FIFO으로서
말 그대로 먼저 들어온 게 먼저 나가는 자료구조입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
Push, Pop, size, empty, front, back 등의 명령어에 따라
아래에 구현된 Switch문과 Que 구조체의 함수를 연결해서
풀었습니다.
개인적으로는 List container를 que처럼 쓰는 것을 편하다 느끼지만
연습 삼아서 큐 자료구조를 한번 만들어 보았습니다.
전체 코드는 다음과 같습니다
package main
import (
"bufio"
"fmt"
"os"
)
// Que
type Que [] int64
func NewQue(cap int) *Que {
que := make(Que, 0, cap)
return &que
}
func (que *Que) Push(elem int64){
*que = append(*que, elem)
}
func (que *Que) Pop() int64{
poppedElem := (*que)[0]
*que = (*que)[1:]
return poppedElem
}
func (que *Que) Front() int64{
return (*que)[0]
}
func (que *Que) Back() int64{
return (*que)[len(*que)-1]
}
func (que *Que) Len() int{
return len(*que)
}
func (que *Que) isEmpty() bool{
isEmpty := true
if(len(*que) > 0){
isEmpty = false
}
return isEmpty
}
func processCommand(que *Que, commandStr *string, commandNum int64) string{
var retStr string = ""
switch *commandStr {
case "push":
{
que.Push(commandNum)
}
case "pop":
{
if(que.isEmpty()){
retStr = "-1"
}else{
retStr = fmt.Sprintf("%v", que.Pop())
}
}
case "size":
{
retStr = fmt.Sprintf("%v", que.Len())
}
case "empty":
{
if(que.isEmpty()){
retStr = "1"
}else{
retStr = "0"
}
}
case "front":
{
if(que.isEmpty()){
retStr = "-1"
}else{
retStr = fmt.Sprintf("%v", que.Front())
}
}
case "back":
{
if(que.isEmpty()){
retStr = "-1"
}else{
retStr = fmt.Sprintf("%v", que.Back())
}
}
}
return retStr
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
que := NewQue(2)
var numberOfCommands int
fmt.Fscanln(reader, &numberOfCommands)
for i := 0; i < numberOfCommands; i++ {
var commandStr string
var commandNum int64
fmt.Fscanln(reader, &commandStr, &commandNum)
outputStr := processCommand(que, &commandStr, commandNum)
if(outputStr != ""){
fmt.Fprintln(writer, outputStr)
}
}
writer.Flush()
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
참조 및 인용
Introduction to Algorithms
A Tour of Go
tour.golang.org
https://tour.golang.org/moretypes/13
A Tour of Go
tour.golang.org
https://stackoverflow.com/questions/2818852/is-there-a-queue-implementation
Is there a queue implementation?
Can anyone suggest Go container for simple and fast FIF/queue, Go has 3 different containers: heap, list and vector. Which one is more suitable to implement a queue?
stackoverflow.com
'Go > Go 알고리즘' 카테고리의 다른 글
백준 10829번 이진수 변환 Go 구현해보기 (0) | 2021.11.07 |
---|---|
백준 10824번 네 수 Go 구현해보기 (0) | 2021.11.07 |
백준 10828번 스택 Go 구현해보기 (0) | 2021.11.07 |
백준 10991번 별찍기-16 Go 구현해보기 (0) | 2021.11.07 |
백준 2948번 2009년 Go 구현해보기 (0) | 2021.11.06 |