알고리즘

[hackerRank] JAVA Stack

91cm 2020. 10. 26. 23:19

 

문제

www.hackerrank.com/challenges/java-stack/problem

 

 

접근방법

- 괄호의 짝이 맞으면 되는 문제

- stack의 pop을 이해한다면 충분히 쉬운 문제

- 좀 더 코드를 줄여보자면 push하는 부분을 else로 빼서하는 것도 코드를 줄일 수 있음

 개인적으로  push하는 부분을 '(', '{', '[' 를 명확하게 써주는게 더좋은거 같아서 코드를 풀어서 씀

 

 

코드

package com.cm;

import java.util.Scanner;
import java.util.Stack;

/**
 * https://www.hackerrank.com/challenges/java-stack/problem
 */
public class JavaStack {

    public JavaStack() {
        solution();
    }

    public void solution(){
        Scanner sc = new Scanner(System.in);

        Stack<String> stack = new Stack<>();

        boolean result = true;

        while (sc.hasNext()) {
            String input=sc.next();

            if(input.length()%2>0){ // 괄호의 개수는 짝수여야 함
                result = false;
            }else{
                String[] arr = input.split("");

                for (int i=0 ; i<arr.length ;i++){
                    if(arr[i].equals("(")) {
                        stack.push(arr[i]);
                    }else if(arr[i].equals("{")) {
                        stack.push(arr[i]);
                    }else if(arr[i].equals("[")) {
                        stack.push(arr[i]);
                    }else if(arr[i].equals(")")){
                        if(!stack.pop().equals("(")){
                            result = false;
                            break;
                        }
                    }else if(arr[i].equals("}")){
                        if(!stack.pop().equals("{")){
                            result = false;
                            break;
                        }
                    }else if(arr[i].equals("]")){
                        if(!stack.pop().equals("[")){
                            result = false;
                            break;
                        }
                    }
                }
            }

            System.out.println(result);
        }
    }
}