본문 바로가기
Algorithm/Problem_백준

스택(10773, 4949)

by uyoo 2019. 11. 5.

[제로 _ 10773]

 

 

* 조건

  1. 숫자를 계속 입력하다가 0이 나오게 되면 가장 최근에 입력된 숫자를 지운다
  2. 최종적으로 적어낸 수의 합을 출력한다

* 알고리즘

- 스택(stack)

 

* 로직(Logic)

- 리스트에 순차적으로 담다가 0이 나오게 되면 마지막으로 입력된 숫자를 제거한다

- 최종적으로 담긴 리스트들의 합을 구한다

 

import java.util.ArrayList;
import java.util.Scanner;

public class Problem_10773 {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        ArrayList<Integer> lists = new ArrayList<>();
        int k = scanner.nextInt();
        for(int i=0; i<k; ++i){
            int input = scanner.nextInt();
            if(input == 0){
                lists.remove(lists.size()-1);
            }
            else lists.add(input);
        }

        int sum = 0;
        for(int list : lists){
            sum += list;
        }
        System.out.println(sum);
    }
}

 

 

[균형잡힌 세상 _ 4949]

 

 

* 조건

  1. 괄호가 주어진다 ex) '(' , ')', '[', ']'
  2. 괄호는 짝이 맞아야 한다
  3. 문자열이 주어졌을 때, 괄호의 짝이 올바르게 맞는지를 판단한다

* 알고리즘

- 스택(stack)

 

* 로직(Logic)

- 열린 괄호('(', '[')는 스택에 푸쉬한다

- 닫힌 괄호가 나왔을 때,

       if) 스택이 비어있거나, 스택의 괄호가 짝이 맞지 않다면 -> 마킹

       else if) 열린 괄호가 존재하고 짝이 맞다면 pop()

- 한 문장에 대한 과정을 끝내고 stack에 괄호가 존재한다면 -> 마킹 (짝이 안맞았다는 말이기 때문에)

- 마킹이 되어있다면 no, 아니라면 yes 출력한다

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Problem_4949 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Stack<String> stack;    //열린 괄호 '(', '[' 를 관리

        String input;
        while ((input = br.readLine()).length() > 1 && !input.equals(".")){
            stack = new Stack<>();

            boolean check = true;
            for(int i=0; i<input.length(); ++i){
                String word = input.substring(i, i+1);

                if(word.equals("(") || word.equals("[")) {
                    stack.push(word);
                }

                else if(word.equals(")")){
                    if(stack.isEmpty()) {
                        check = false;
                        break;
                    }
                    else if(!stack.peek().equals("(")){
                        check = false;
                        break;
                    }
                    stack.pop();
                }

                else if(word.equals("]")){
                    if(stack.isEmpty()) {
                        check = false;
                        break;
                    }
                    else if(!stack.peek().equals("[")){
                        check = false;
                        break;
                    }
                    stack.pop();
                }
            }

            if(!stack.isEmpty()) check = false;
            if(!check) System.out.println("no");
            else System.out.println("yes");
        }
    }
}

'Algorithm > Problem_백준' 카테고리의 다른 글

분할 정복(2630, 1992)  (0) 2019.11.21
큐, 덱(10845, 2164)  (0) 2019.11.19
수학3 (5086, 1037)  (0) 2019.10.31
그리디 알고리즘(11047, 1931)  (0) 2019.10.29
동적계획법1(2748, 1003, 1904, 9461)  (0) 2019.10.24