문제
풀이
참고한 풀이
참고글: 자바 컬렉션 프레임워크
참고글: stack interface
스택 문제 풀려다가 자바 컬렉션 인터페이스를 공부하게 생긴...
문제 자체는 쉬우나 이번에는 위 글들을 읽으며 자바 컬렉션에 대해 다시 공부했다.
- Stack 라이브러리는 'Vector' 클래스를 상속받아 구현하고 있다.
- Vector 클래스는 기본적으로 'ArrayList'와 그 구조가 거의 같다.
- Stack 클래스는 내부에서 최상위 타입 배열인 Object[] 배열을 사용하여 데이터들을 관리
- (ArrayList는 다른 자료구조와 달리 Object[] 배열(객체 배열)을 두고 사용한다)
※ 주의: 객체끼리 비교할 때는 동등연산자(==)가 아니라 반드시 .equals() 로 비교해야 한다. 동등연산자는 주소를 비교하는 것이기 때문에 잘못된 결과를 초래
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int[] stack;
public static int size=0;
public static void push(int x) {
stack[size] = x;
size++;
}
public static int pop() {
if(size == 0) return -1; //빈 스택일 경우
int num = stack[size-1]; //삭제할 요소
stack[size-1] = 0; //삭제
size--;
return num;
}
public static int size() {
return size;
}
public static int empty() {
if(size == 0) return 1;
else return 0;
}
public static int top() {
if(size == 0) return -1;
return stack[size-1];
}
public static void main(String[] args) throws NumberFormatException, IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
stack = new int[N];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
switch(st.nextToken()){
case "push":
push(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(pop()).append("\n");
break;
case "size":
sb.append(size()).append("\n");
break;
case "empty":
sb.append(empty()).append("\n");
break;
case "top":
sb.append(top()).append("\n");
break;
}
}
System.out.println(sb);
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 11655번 ROT13 (0) | 2022.06.03 |
---|---|
[PS] 백준 10799번 쇠막대기 (0) | 2022.05.30 |
[PS] 백준 11004번 K번째 수 (0) | 2022.05.24 |
[PS] 백준 11652번 카드 (0) | 2022.05.23 |
[PS] 백준 10989번 수 정렬하기 3 (0) | 2022.05.21 |