BOJ 10828 스택
- 문제 링크
https://www.acmicpc.net/problem/10828
- 문제 해설
자바의 util.Stack을 이용하여 풀면 쉽게 풀 수 있지만, 직접 스택을 구현하여 풀었다. tail은 스택 제일 상단 원소의 인덱스 값이다. 구현하는 데 있어 딱히 어려운 점은 없고 자료형의 변환에만 신경써주면서 구현하면 된다.
한 가지 시행착오를 겪은 것이 있다면, 처음에 코드를 짤 때는 st.nextToken()을 받아줄 변수를 만들지 않았다. 예를 들자면, 아래의 67번째 줄의 코드를 if(st.nextToken().equals("push"))와 같이 짰다. 나머지 else if문들도 똑같이 작성하였다. 이렇게 구현을 하니 내가 얻고자 하는 값이 나오지 않았다.
StringTokenizer 사용을 제대로 하지 않아서 생긴 문제이다.
처음 if문 내에서 호출된 st.nextToken()을 A라고 하자. "push"가 아닐 경우 else if문으로 가서 A가 그대로 사용되어야 하는게 나의 목적인데, 코드 상으로 새롭게 st.nextToken()이 호출된다. 그러므로, 내가 목적한대로 동작하려면 st.nextToken()을 받아줄 변수를 하나 지정해주는 것이 좋다.
nextToken()은 호출될 때마다 매번 구분자를 기준으로 다음 토큰을 반환한다는 것을 잊지 말자.
- 코드 보기
import java.io.*;
import java.util.*;
class Stack
{
private int tail;
private int arr[];
public Stack(int size)
{
tail = -1;
arr = new int[size];
}
public void push(int x)
{
arr[++tail] = x;
}
public int pop()
{
if (tail == -1)
return -1;
else
return arr[tail--];
}
public int size()
{
return tail + 1;
}
public int empty()
{
if (tail == -1)
return 1;
else
return 0;
}
public int top()
{
if (tail == -1)
return -1;
else
return arr[tail];
}
}
public class Main
{
static int n;
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
Stack s = new Stack(n);
for (int i = 0; i < n; i++)
{
st = new StringTokenizer(br.readLine());
String str = st.nextToken();
if (str.equals("push"))
{
s.push(Integer.parseInt(st.nextToken()));
}
else if (str.equals("pop"))
{
bw.write(String.valueOf(s.pop()));
bw.newLine();
}
else if (str.equals("size"))
{
bw.write(String.valueOf(s.size()));
bw.newLine();
}
else if (str.equals("empty"))
{
bw.write(String.valueOf(s.empty()));
bw.newLine();
}
else if (str.equals("top"))
{
bw.write(String.valueOf(s.top()));
bw.newLine();
}
}
br.close();
bw.flush();
bw.close();
}
}
'PS > BOJ' 카테고리의 다른 글
BOJ 10799 쇠막대기 [Java] (0) | 2021.07.18 |
---|---|
BOJ 9012 괄호 [Java] (0) | 2021.07.18 |
BOJ 11004 K번째 수 [Java] (0) | 2021.07.17 |
BOJ 10989 수 정렬하기 3 [Java] (0) | 2021.07.16 |
BOJ 10825 국영수 [Java] (0) | 2021.07.15 |