> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Stack

jini:) 2023. 10. 10. 09:56
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java Stack
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

컴퓨터 과학에서 스택 또는 LIFO(후입선출)는 요소의 컬렉션 역할을 하는 추상 데이터 유형으로, 컬렉션에 요소를 추가하는 push와 마지막 요소를 제거하는 pop의 두 가지 주요 작업이 있습니다. — Wikipedia

 

괄호만 포함하는 문자열은 다음이 참인 경우 균형이 맞춰집니다. 1. 빈 문자열인 경우 2. A와 B가 맞으면 AB가 맞고, 3. A가 맞으면 (A)와 {A} 및 [ A]도 맞습니다.

올바르게 균형이 맞춰진 일부 문자열의 예는 "{}()", "[{()}]", "({()})"입니다.

일부 불균형 문자열의 예는 "{}(", "({)}", "[[", "}{" 등입니다.

문자열이 주어지면 균형이 맞는지 여부를 결정합니다.

 

Input Format

입력 파일에는 비어 있지 않은 단일 문자열이 있는 여러 줄이 있습니다. 파일 끝까지 입력을 읽어야 합니다.

 

Output Format

각 경우에 대해 문자열이 균형이 맞으면 'true'를 출력하고 그렇지 않으면 'false'를 출력합니다.

 

 

Sample Input

{}()
({()})
{}(
[]

 

Sample Output

true
true
false
true

 

 

Code

import java.util.*;
class Solution{
	
	public static boolean isBalanced(String s) {
        Stack<Character> stack = new Stack<>();
        
        for (char c : s.toCharArray()) {
            if (c == '(' || c == '{' || c == '[') {
                stack.push(c);
            } else if (c == ')' || c == '}' || c == ']') {
                if (stack.isEmpty()) {
                    return false; 
                }
                char openBracket = stack.pop();
                if ((c == ')' && openBracket != '(') ||
                    (c == '}' && openBracket != '{') ||
                    (c == ']' && openBracket != '[')) {
                    return false; 
                }
            }
        }
        
        return stack.isEmpty(); 
    }

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

        while (sc.hasNext()) {
            String input = sc.next();
            boolean balanced = isBalanced(input);
            System.out.println(balanced);
        }
    }
}

 

 

스택(Stack)
데이터를 저장하고 관리하는 자료 구조 중 하나.
데이터를 선형으로 저장하고 접근할 수 있는 구조.
데이터를 저장 할 때 한쪽 끝에서만 접근 가능.
Last In, First Out (LIFO) 원칙을 따름.
가장 최근에 추가된 데이터가 가장 먼저 제거됨.
크기가 가변적일수 있음.
데이터 추가, 제거 시 상수 시간 (O(1))이 소요됨.

push()
데이터를 스택의 맨 위(또는 맨 끝)에 추가하는 작업.
스택에 데이터를 삽입.

pop()
스택의 맨 위(또는 맨 끝)에서 데이터를 제거하고 반환하는 작업.
가장 최근에 추가된 데이터가 제거.

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형