백준(10845, 9012)

찬들이·2022년 7월 16일
0

알고리즘

목록 보기
5/42

문제 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);
    }
}

풀이접근

  1. 선형 자료구조 큐에 대해서 떠올린다.선입선출(FIFO)
  2. 큐 안에 있는 메소드를 사용하여 back을 제외한 나머지를 구현한다.
  3. push를 실행할 때 push하는 숫자를 변수에 저장하여 back 명령을 완성한다.
  4. 반복문이 끝나면 한 번에 출력한다.

문제 핵심

  • 선형 자료구조 큐에 대해서 알고 있는지!
  • 자바 큐에서 제공하는 메소드들을 잘 활용하는지!

문제 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);
    }
}

풀이 접근

  1. 문제에서 말하는 VPS(닫힌 모양의 대칭구조)를 이해하고, 스택을 떠올렸다.
  2. 스택으로 '('는 push하고, ')'가 나올 경우에는 pop을 실행한다.
  3. 예외적으로 스택이 비어있을 때 ')'가 나오게 된다면 VPS를 어기게 됨으로 해당 값을 push하고 반복문을 종료한다.
  4. VPS면 스택은 비어있을 것이므로 스택이 비어있을 때 YES를 출력, 그렇지 않을 경우에는 NO를 출력한다.

문제 핵심

  • VPS가 단순 대칭 구조가 아닌, 닫힌 모양의 대칭구조를 말한다.
  • 자료구조에 대한 공부가 되어 있는지!
profile
Junior-Backend-Developer

0개의 댓글