문제 10845번
소스코드
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
public class boj10845 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Queue<Integer> qu = new LinkedList();
int first =0;
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
String[] a = br.readLine().split(" ");
String name = "";
int num =-1;
if(a.length == 1){
name = a[0];
}else if(a.length ==2){
name = a[0];
num = Integer.parseInt(a[1]);
}
if(name.equals("push")){
qu.offer(num);
first = num;
}else if(name.equals("pop")){
if(qu.isEmpty()){
sb.append(-1 + "\n");
}else{
sb.append(qu.peek() + "\n");
qu.remove();
}
}else if(name.equals("size")){
sb.append(qu.size() + "\n");
}else if(name.equals("empty")){
if(qu.isEmpty()){
sb.append(1+ "\n");
}else{
sb.append(0+ "\n");
}
}else if(name.equals("front")){
if(qu.isEmpty()){
sb.append(-1+ "\n");
}else{
sb.append(qu.peek() + "\n");
}
}else if(name.equals("back")){
if(qu.isEmpty()){
sb.append(-1 + "\n");
}else {
sb.append(first + "\n");
}
}
}
System.out.println(sb);
}
}
풀이접근
- 선형 자료구조 큐에 대해서 떠올린다.선입선출(FIFO)
- 큐 안에 있는 메소드를 사용하여 back을 제외한 나머지를 구현한다.
- push를 실행할 때 push하는 숫자를 변수에 저장하여 back 명령을 완성한다.
- 반복문이 끝나면 한 번에 출력한다.
문제 핵심
- 선형 자료구조 큐에 대해서 알고 있는지!
- 자바 큐에서 제공하는 메소드들을 잘 활용하는지!
문제 9012번
소스코드
import java.io.*;
import java.util.*;
public class boj9012 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb= new StringBuilder();
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
String s = br.readLine();
Stack<Character> stack = new Stack<Character>();
for (int j = 0; j < s.length(); j++) {
if(s.charAt(j) == '('){
stack.push(s.charAt(j));
}else{
if(stack.isEmpty()){
stack.push(s.charAt(j));
break;
}else{
stack.pop();
}
}
}
if(stack.isEmpty()){
sb.append("YES\n");
}else{
sb.append("NO\n");
}
}
System.out.println(sb);
}
}
풀이 접근
- 문제에서 말하는 VPS(닫힌 모양의 대칭구조)를 이해하고, 스택을 떠올렸다.
- 스택으로 '('는 push하고, ')'가 나올 경우에는 pop을 실행한다.
- 예외적으로 스택이 비어있을 때 ')'가 나오게 된다면 VPS를 어기게 됨으로 해당 값을 push하고 반복문을 종료한다.
- VPS면 스택은 비어있을 것이므로 스택이 비어있을 때 YES를 출력, 그렇지 않을 경우에는 NO를 출력한다.
문제 핵심
- VPS가 단순 대칭 구조가 아닌, 닫힌 모양의 대칭구조를 말한다.
- 자료구조에 대한 공부가 되어 있는지!