알고리즘 및 자료구조를 공부하면서 복습을 위해 문제를 풀고 있습니다.
https://www.acmicpc.net/problem/10828
Stack을 학습 후 스스로 구현할 수 있을까라는 생각에 풀어본 백준 문제
시간 제한이라는 조건을 신경쓰면서 문제 해결
Stack을 구현한 클래스와 실행을 담당할 클래스로 나눠서 문제를 풀었다.
Stack 구현 : Stack
예외 처리를 할까 고민했지만.. 별다른 요구사항이 안 보여서 예외처리는 따로 작성 안 함..
class Stack {
private int[] stk; // 정수가 저장될 배열
private int capacity; // 배열의 크기
private int ptr; // 위치를 가리키는 변수
// 생성자
public Stack(int capacity) {
this.capacity = capacity;
stk = new int[this.capacity];
ptr = 0;
}
// push X : 정수 X를 스택에 넣는 연산
public int push(int x) {
return stk[ptr++] = x;
}
// pop : 스택에서 가장 위에 있는 정수를 빼고 그 수를 출력하며 정수가 없을 경우 -1 출력
public int pop() {
if (ptr < 1) {
return -1;
}
return stk[--ptr];
}
// size : 스택에 들어 있는 정수의 개수를 출력
public int size() {
return ptr;
}
// empty : 스택이 비어있으면 1, 아니면 0을 출력
public int isEmpty() {
if (ptr == 0) {
return 1;
}
return 0;
}
// top : 스텍의 가장 위에 있는 정수를 출력 정수가 없을 경우 -1 출력
public int top() {
if (ptr < 1) {
return -1;
}
return stk[ptr - 1];
}
}
실행 : Main
스택의 저장 용량은 테스트 케이스 횟수로 지정
시간제한으로 인해 Scanner가 아닌 BufferedReader를 이용해서 입력 받음
문자열로 입력이 들어와 각 명령어에 맞게 메서드를 호출해야 하므로 StringTokenizer 사용 -> 입력에 맞게 각 메서드 호출
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int capacity = Integer.parseInt(br.readLine());
Stack stk = new Stack(capacity);
int i = 0;
while (i < capacity) {
st = new StringTokenizer(br.readLine());
switch (st.nextToken()) {
case "push":
stk.push(Integer.parseInt(st.nextToken()));
break;
case "pop":
System.out.println(stk.pop());
break;
case "size":
System.out.println(stk.size());
break;
case "empty":
System.out.println(stk.isEmpty());
break;
case "top":
System.out.println(stk.top());
break;
}
i++;
}
br.close();
}
}
제출 결과
런타임 에러....인텔리제이에서 진행할 경우 패키지랑 클래스명 여러 번 확인하기...!
StringBuilder 클래스를 이용해서 문자열을 처리 -> StringTokenizer를 이용해서 문자열 처리 : 시간 단축, 코드 간결?해짐
'Algorithm > BAEKJOON' 카테고리의 다른 글
[백준] 3273 두 수의 합 - Java (0) | 2022.07.02 |
---|---|
[백준] 2559 수열 (0) | 2022.06.25 |
[백준] 11659 구간 합 구하기 4 - Java (0) | 2022.06.24 |
[백준] 11660 구간 합 구하기 5 - Java (0) | 2022.06.23 |