반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 사칙연산
- 프로그래머스
- 브루트포스 알고리즘
- 이분 탐색
- 큰 수 연산
- 별 찍기
- 문자열제곱
- 연결리스트 중복제거
- 재귀
- LeetCode 83번
- 정렬
- 조합론
- 유클리드 호제법
- 연결리스트 정렬
- 실패함수
- KMP알고리즘
- LeetCode 83 c언어
- 자료 구조
- 임의 정밀도 / 큰 수 연산
- 다이나믹 프로그래밍
- 구현
- 시뮬레이션
- Queue
- 수학
- 문자열
- 정수론
- 해시를 사용한 집합과 맵
- 큐
- 스택
- LeetCode Remove Duplicates from Sorted List in c
Archives
- Today
- Total
hahn
단계별로 풀어보기(스택 - 스택) 본문
728x90
반응형
http://boj.kr/82fcd1e8de454f36a91fee19e65c3579
더보기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int commandCount = Integer.parseInt(br.readLine()),
point = -1;
StringTokenizer st;
List<Integer> arr = new ArrayList<Integer>();
for(int i = 0; i < commandCount; i++) {
st = new StringTokenizer(br.readLine(), " ");
switch(st.nextToken()) {
case "push":
point++;
arr.add(Integer.parseInt(st.nextToken()));
break;
case "pop":
if(point == -1) {
bw.write(String.valueOf(-1));
bw.newLine();
}else {
bw.write(String.valueOf(arr.remove(point)));
point--;
bw.newLine();
}
break;
case "size":
bw.write(String.valueOf(point + 1));
bw.newLine();
break;
case "empty":
if(arr.isEmpty()) {
bw.write(String.valueOf(1));
bw.newLine();
}else {
bw.write(String.valueOf(0));
bw.newLine();
}
break;
case "top":
if(point == -1) {
bw.write(String.valueOf(-1));
bw.newLine();
}else {
bw.write(String.valueOf(arr.get(point)));
bw.newLine();
}
break;
}
}
bw.close();
}
}
일단 스택의 크기가 정해져 있는 건 아니니까 ArrayList 이용했다.
인덱스는 point로 각 command의 설명에 따라 증감했다.
처음에는 for문으로 분기처리하여 했는데
이걸 하면서 생각한 게 자바는 객체지향인데
다음부터는 객체지향으로 만들 필요가 있다고 생각했다.
sysout으로 찍어봤는데 답은 잘 나오지만
시간 초과가 떠서 이를 어떻게 해결할까 고민했다.
BufferedReader로 교체하면서
push 때문에 split을 해야 할 상황이 생겼는데
String []을 이용하기에는 뭔가 좀 꺼려져서
(물론 구현은 할 수 있다)
Botherahn :: [JAVA] StringTokenizer (tistory.com)
얘를 찾아서 응용했다.
문제는 if문 조건 처리할 때 조건문마다
st.nextToken()를 넣으면 당연하게
NoSuchElementException 에러가 난다.
물론 String에 새로 담아서 조건 처리할 수 있지만
그냥 switch문을 사용해서 코드 작성하고 제출했더니 성공
728x90
반응형
'코딩테스트 연습 > 백준(JAVA)' 카테고리의 다른 글
단계별로 풀어보기(큐, 덱 - 큐 2) (0) | 2021.09.17 |
---|---|
[백준 - JAVA] 큐 (0) | 2021.09.17 |
[백준 - JAVA] 쉽게 푸는 문제 (0) | 2021.09.17 |
[백준 - JAVA] 30 (0) | 2021.09.17 |
[백준 - JAVA] 별 찍기 - 23 (0) | 2021.09.17 |