[Golang] [백준/10866] 덱

wookii·2021년 1월 17일
0

CP with Golang

목록 보기
5/8

[백준/10866] 덱

https://www.acmicpc.net/problem/10866

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var (
	w = bufio.NewWriter(os.Stdout)
	r = bufio.NewReader(os.Stdin)
)

// Deque type
type Deque []int

// PopFront from Deque
func (d *Deque) PopFront() int {
	if len(*d) != 0 {
		data := (*d)[0]
		(*d) = (*d)[1:]
		return data
	}
	return -1
}

// PopBack from Deque
func (d *Deque) PopBack() int {
	if len(*d) != 0 {
		data := (*d)[len(*d)-1]
		(*d) = (*d)[:len(*d)-1]
		return data
	}
	return -1
}

// PushBack to Deque
func (d *Deque) PushBack(k int) {
	(*d) = append((*d), k)
}

// PushFront to Deque
func (d *Deque) PushFront(k int) {
	n := &Deque{k}
	*d = append(*n, (*d)...)
}

// Empty Deque
func (d *Deque) Empty() int {
	if len(*d) == 0 {
		return 1
	}
	return 0
}

// Size Deque
func (d *Deque) Size() int {
	return len(*d)
}

// Front Deque
func (d *Deque) Front() int {
	if d.Empty() == 1 {
		return -1
	}
	return (*d)[0]
}

// Back Deque
func (d *Deque) Back() int {
	if d.Empty() == 1 {
		return -1
	}
	return (*d)[d.Size()-1]
}

func main() {
	defer w.Flush()
	var n int
	fmt.Fscanf(r, "%d\n", &n)
	var deque Deque
	for i := 0; i < n; i++ {
		text, _ := r.ReadString('\n')
		text = strings.TrimSuffix(text, "\n")
		split := strings.Split(text, " ")
		switch split[0] {
		case "push_front":
			item, _ := strconv.Atoi(split[1])
			deque.PushFront(item)
		case "push_back":
			item, _ := strconv.Atoi(split[1])
			deque.PushBack(item)
		case "front":
			fmt.Fprintf(w, "%d\n", deque.Front())
		case "pop_front":
			fmt.Fprintf(w, "%d\n", deque.PopFront())
		case "pop_back":
			fmt.Fprintf(w, "%d\n", deque.PopBack())
		case "empty":
			fmt.Fprintf(w, "%d\n", deque.Empty())
		case "size":
			fmt.Fprintf(w, "%d\n", deque.Size())
		case "back":
			fmt.Fprintf(w, "%d\n", deque.Back())
		}
	}
}
profile
Love Kubernetes | Python & Go

0개의 댓글