```
백준 10828번 스택 Go 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 10828번 풀이
- 간단한 스택 연습
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
백준 10828번은
난이도 실버 등급의 문제로서
스택 자료구조를 구현하는 문제입니다.
LIFO (Last In First Out)으로서
마지막에 넣은 데이터를 가장 먼저 빼주는 자료구조입니다.
GO의 경우 C++처럼 STL내에 따로
Stack이 확인이 안되서
(있다면 댓글 부탁드립니다)
struct, interface, function을 사용해서 만들어서 진행을 할 생각도 해봤습니다만
결국
List를 사용했습니다.
주어지는 명령어에 따라서
Push의 경우 해당되는 숫자를 스택에 넣어주고
Pop은 숫자를 빼주고 없는 경우 -1을 출력
empty는 비어있는지 확인
size는 크기를 출력
top은 맨 위에 값을 출력해주면 됩니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
테스트 케이스만큼 입력받고
각 입력에 따라 stackCommand 함수를 실행해서
list에 문자열에 따라서 스위치 문을 돌고
해당되는 연산을 수행하였습니다.
전체 코드는 다음과 같습니다
package main
import (
"bufio"
"container/list"
"fmt"
"os"
)
func stackCommand(numberList *list.List, commandStr string, commandNum int) string {
var retStr string = ""
switch commandStr {
case "push":
{
numberList.PushBack(commandNum)
}
case "pop":
{
lastElem := numberList.Back()
if lastElem != nil {
retStr = fmt.Sprintf("%v", lastElem.Value)
numberList.Remove(lastElem)
}else{
retStr = "-1"
}
}
case "size":
{
retStr = fmt.Sprintf("%v", numberList.Len())
}
case "empty":
{
if(numberList.Len() == 0){
retStr = "1"
}else{
retStr = "0"
}
}
case "top":
{
lastElem := numberList.Back()
if lastElem != nil {
retStr = fmt.Sprintf("%v", lastElem.Value)
}else{
retStr = "-1"
}
}
}
return retStr
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
var numberOfCommands int
fmt.Fscanln(reader, &numberOfCommands)
numberList := list.New()
for i := 0; i < numberOfCommands; i++ {
var commandStr string
var commandNum int
fmt.Fscanln(reader, &commandStr, &commandNum)
outputStr := stackCommand(numberList, commandStr, commandNum)
if(outputStr != ""){
fmt.Fprintln(writer, outputStr)
}
}
writer.Flush()
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
참조 및 인용
Introduction to Algorithms
A Tour of Go
tour.golang.org
'Go > Go 알고리즘' 카테고리의 다른 글
백준 10829번 이진수 변환 Go 구현해보기 (0) | 2021.11.07 |
---|---|
백준 10824번 네 수 Go 구현해보기 (0) | 2021.11.07 |
백준 10991번 별찍기-16 Go 구현해보기 (0) | 2021.11.07 |
백준 2948번 2009년 Go 구현해보기 (0) | 2021.11.06 |
백준 15552번 빠른 입출력 Go 구현해보기 (0) | 2021.11.06 |
```
백준 10828번 스택 Go 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 10828번 풀이
- 간단한 스택 연습
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
백준 10828번은
난이도 실버 등급의 문제로서
스택 자료구조를 구현하는 문제입니다.
LIFO (Last In First Out)으로서
마지막에 넣은 데이터를 가장 먼저 빼주는 자료구조입니다.
GO의 경우 C++처럼 STL내에 따로
Stack이 확인이 안되서
(있다면 댓글 부탁드립니다)
struct, interface, function을 사용해서 만들어서 진행을 할 생각도 해봤습니다만
결국
List를 사용했습니다.
주어지는 명령어에 따라서
Push의 경우 해당되는 숫자를 스택에 넣어주고
Pop은 숫자를 빼주고 없는 경우 -1을 출력
empty는 비어있는지 확인
size는 크기를 출력
top은 맨 위에 값을 출력해주면 됩니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
테스트 케이스만큼 입력받고
각 입력에 따라 stackCommand 함수를 실행해서
list에 문자열에 따라서 스위치 문을 돌고
해당되는 연산을 수행하였습니다.
전체 코드는 다음과 같습니다
package main
import (
"bufio"
"container/list"
"fmt"
"os"
)
func stackCommand(numberList *list.List, commandStr string, commandNum int) string {
var retStr string = ""
switch commandStr {
case "push":
{
numberList.PushBack(commandNum)
}
case "pop":
{
lastElem := numberList.Back()
if lastElem != nil {
retStr = fmt.Sprintf("%v", lastElem.Value)
numberList.Remove(lastElem)
}else{
retStr = "-1"
}
}
case "size":
{
retStr = fmt.Sprintf("%v", numberList.Len())
}
case "empty":
{
if(numberList.Len() == 0){
retStr = "1"
}else{
retStr = "0"
}
}
case "top":
{
lastElem := numberList.Back()
if lastElem != nil {
retStr = fmt.Sprintf("%v", lastElem.Value)
}else{
retStr = "-1"
}
}
}
return retStr
}
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
var numberOfCommands int
fmt.Fscanln(reader, &numberOfCommands)
numberList := list.New()
for i := 0; i < numberOfCommands; i++ {
var commandStr string
var commandNum int
fmt.Fscanln(reader, &commandStr, &commandNum)
outputStr := stackCommand(numberList, commandStr, commandNum)
if(outputStr != ""){
fmt.Fprintln(writer, outputStr)
}
}
writer.Flush()
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
참조 및 인용
Introduction to Algorithms
A Tour of Go
tour.golang.org
'Go > Go 알고리즘' 카테고리의 다른 글
백준 10829번 이진수 변환 Go 구현해보기 (0) | 2021.11.07 |
---|---|
백준 10824번 네 수 Go 구현해보기 (0) | 2021.11.07 |
백준 10991번 별찍기-16 Go 구현해보기 (0) | 2021.11.07 |
백준 2948번 2009년 Go 구현해보기 (0) | 2021.11.06 |
백준 15552번 빠른 입출력 Go 구현해보기 (0) | 2021.11.06 |