728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Data Structures > Java Stack
컴퓨터 과학에서 스택 또는 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
반응형
'> 개발-IT-인터넷 > > JAVA' 카테고리의 다른 글
[해커랭크(HackerRank) JAVA 풀이] - Java Generics (0) | 2023.10.12 |
---|---|
[해커랭크(HackerRank) JAVA 풀이] - Java Hashset (1) | 2023.10.11 |
자바 List와 Map의 차이점 (1) | 2023.10.06 |
[해커랭크(HackerRank) JAVA 풀이] - Java Map (1) | 2023.10.06 |
[해커랭크(HackerRank) JAVA 풀이] - Java List (1) | 2023.10.05 |