Hyogi's Notebook

[프로그래머스 / JAVA] 올바른 괄호 Lv.2 풀이

by 효기’s

문제

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다.

 

예를 들어
"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고,

올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

 

제한 사항

문자열 s의 길이 : 100,000 이하의 자연수

문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

 

입출력 예

 

풀이 과정

① 이 문제는 스택을 사용하여 문제를 풀었습니다. 먼저 스택을 Character형으로 객체를 선언합니다.

② s 문자열의 길이만큼 반복문을 돌립니다.

③ if 조건문에 s 문자열에서 받아온 charAt을 사용하여 '(' 일때와 ')' 일때를 구분한다.

④ '(' 일때 stack에 push를 한다.

⑤ ')' 일때 if 조건문에 stack이 비어있지 않는 경우 stack에 '(' 를 pop한다. ( stack은 '('  넣을 수 있다.)

else는 '(' 가 비어있는 경우인데 '(' 를 pop할게 없기 때문 (예를들어 "))))"인경우) 로 인해 answer = false로 지정한다.

따라서 ※  '(' 이 없는데 ')' 가 있는 경우 false로 변경하는것에 목적을 가지고 있다.

⑥ for문 밖에서는 스택이 비어있지 않을때 즉, 열려있는 괄호 '(' 가 있는데 닫혀있지 않는 경우에 false로 지정한다.

ex) (((())

 

문제 풀때 알아야 할 Stack 사용법

① 선언

import java.util.Stack;
Stack<Integer> stack = new Stack<>();
Stack<String> stack = new Stack<>();

② 값 추가

stack.push(1);

③ 값 삭제 (99% 같은 기능을 가지는데 pop은 공백 스택일때 에러 발생, remove는 옳지 않은 index 입력시 에러발생)

stack.pop();       
stack.remove(index);

④ 상단 값 출력

stack.peek();

⑤ 다양한 메서드

stack.size();      // stack의 크기 출력
stack.empty();     // stack이 비어있는지 체크 (비어있으면 true)
stack.contains(1); // stack에 1이 있는지 체크 (있으면 true)
stack.search(찾을 value);   // stack에 해당 원소가 있는지 체크 (반환값 int 존재하지않으면 -1)
stack.set(index, 변경할 value);   // stack값 변경 (삽입된 순서대로 index)
stack.elementAt(index);   // 해당 인덱스에 존재하는 값 반환 (삽입된 순서대로 index)
stack.clear();   // stack 초기화 (공백 스택 만들기)

 

전체 코드
import java.util.Stack;

class Solution {
	static boolean solution(String s) {
		boolean answer = true;

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

		for (int i = 0; i < s.length(); i++) {

			if (s.charAt(i) == '(') {
				stack.push(s.charAt(i));

			} else if (s.charAt(i) == ')') {
				if (!stack.isEmpty()) {
					stack.pop();

				} else {
					answer = false;
					break;
				}
			}
		}

		if (!stack.isEmpty()) {
			answer = false;
		}

		return answer;
	}

	public static void main(String[] args) {
		// 원하는 입력을 넣으시면 됩니다.
		System.out.println(solution(""));
	}
}

 

결과

블로그의 정보

감성 개발자 효기

효기’s

활동하기