간단한 자료구조 문제이지만, C++ 대신 자바를 공부하면서 새로 풀어봤다.
문제 : https://www.acmicpc.net/problem/10828
코드
package Algorithm;
import java.util.Scanner;
public class Problem10828 {
static int[] arr = new int[10001];
static int topflag=-1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int n = sc.nextInt();
for(int i=0; i<n; i++) {
String cmd = sc.next();
if(cmd.equals("push")) {
int num = sc.nextInt();
push(num);
}
else if(cmd.equals("pop")) sb.append(pop()).append('\n');
else if(cmd.equals("size")) sb.append(size()).append('\n');
else if(cmd.equals("empty")) sb.append(empty()).append('\n');
else sb.append(top()).append('\n');
}
System.out.print(sb);
}
static public void push(int x) {
topflag++;
arr[topflag]=x;
}
static public int pop() {
if(topflag==-1) {
return -1;
}
int tmp = arr[topflag];
topflag--;
return tmp;
}
static public int size() {
return topflag+1;
}
static public int empty() {
if(topflag==-1) return 1;
else return 0;
}
static public int top() {
if(topflag==-1) {
return -1;
}
else return arr[topflag];
}
}
설명
배열을 이용해서 스택을 구현했다. 구현은 C++과 다르지 않아서 어렵지 않았지만, 아직 자바의 모든 입출력 방식을 아는 것이 아니라서 그 부분에서 시간 초과가 발생했다. 처음에 System.out.println으로 전부 출력했는데, 시간이 오래 걸려서 StringBuilder를 사용했다. StringBuilder로 각 함수의 리턴값과 개행문자를 묶어서 저장해 둔 후, 마지막에 한 번에 출력하도록 했다.
스택은 배열을 이용해서 구현했다. 스택의 가장 위에 있는 값을 가리키는 인덱스로 topflag를 선언했다. topflag가 -1이라면 스택이 비어있는 상태임을 나타내고, 스택에 push 되면 1 증가, pop 되면 1을 감소시킴으로써 스택을 구현했다.
'클라우드 스쿨 > 자바' 카테고리의 다른 글
Static, String (0) | 2023.06.26 |
---|---|
객체지향 언어 (0) | 2023.06.23 |