스택
- StringBuilder 사용.
- String S 변수에 예제 String들을 담는 동시에 비교함.
- push 2 같은 경우에 push와 2를 어떻게 분리하나 고민했는데 st.nextToken()으로 공백 기준 한번 더 분리해주면 됐다.
import java.io.*;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String S = st.nextToken();
if (S.equals("push")) {
stack.push(Integer.parseInt(st.nextToken()));
} else if (S.equals("pop")) {
if (!stack.empty()) {
sb.append(stack.pop());
sb.append("\n");
} else {
sb.append(-1);
sb.append("\n");
}
} else if (S.equals("size")) {
sb.append(stack.size());
sb.append("\n");
} else if (S.equals("empty")) {
if (stack.empty()) {
sb.append(1);
sb.append("\n");
} else {
sb.append(0);
sb.append("\n");
}
} else if (S.equals("top")) {
if (!stack.empty()) {
sb.append(stack.peek());
sb.append("\n");
} else {
sb.append(-1);
sb.append("\n");
}
}
}
System.out.println(sb);
}
}
-> if else 문으로 하니 코드가 너무 더러워지니까 switch문으로 다시 적어보기
큐
- 자바에서 Queue는 LinkedList로 선언해야됨.
- queue의 back을 직접 코드로 구현하는거에 막혔다. queue에서 가장 뒤에 있는 정수를 바로 출력하는 메서드는 없기 때문에, 해당 큐 변수를 LinkedList로 형변환 후 peekLast() 메서드를 사용해주었다.
if (!queue.isEmpty()) {
sb.append(((LinkedList<Integer>) queue).peekLast());
sb.append("\n");
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Queue<Integer> queue = new LinkedList<>();
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String S = st.nextToken();
if (S.equals("push")) {
queue.offer(Integer.parseInt(st.nextToken()));
} else if (S.equals("pop")) {
if (!queue.isEmpty()) {
sb.append(queue.remove());
sb.append("\n");
} else {
sb.append(-1);
sb.append("\n");
}
} else if (S.equals("size")) {
sb.append(queue.size());
sb.append("\n");
} else if (S.equals("empty")) {
if (queue.isEmpty()) {
sb.append(1);
sb.append("\n");
} else {
sb.append(0);
sb.append("\n");
}
} else if (S.equals("front")) {
if (!queue.isEmpty()) {
sb.append(queue.peek());
sb.append("\n");
} else {
sb.append(-1);
sb.append("\n");
}
} else if (S.equals("back")) {
if (!queue.isEmpty()) {
sb.append(((LinkedList<Integer>) queue).peekLast());
sb.append("\n");
} else {
sb.append(-1);
sb.append("\n");
}
}
}
System.out.println(sb);
}
}
-> 최종 코드. 얘도 switch로 바꿔서 다시 풀어보기.
'코테 준비 > 알고리즘' 카테고리의 다른 글
[알고리즘] 그래프 (1) | 2024.03.26 |
---|---|
[알고리즘] 정수론 (1) | 2024.03.16 |
[알고리즘] 그리디 (0) | 2024.03.15 |
[알고리즘] 탐색 (1) | 2024.03.14 |
[자료구조] 정렬 (3) | 2024.03.12 |