문제
https://programmers.co.kr/learn/courses/30/lessons/12909
문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
풀이
보통 괄호 짝 맞추는 문제를 보면 스택으로 풀이하는 경우가 많은데 이렇게 올바른 괄호쌍인지만 판별하는 경우에는 스택을 이용하지 않아도 풀 수 있다. 정석적인 방법은 아닐 수도 있는데 사실 스택을 이용하는 풀이법이랑 원리는 비슷한 것 같다. 괄호 문제를 간간히 풀다가 스택 쓰기 귀찮아서... 간단한 문제들은 이렇게 해도 무난하게 풀리길래 그냥 이렇게 풀고 있다.
방법은 0으로 초기화된 sum에 왼쪽 괄호가 나오면 +1을 해주고 오른쪽 괄호가 나오면 -1 을 해준다. 올바른 괄호가 되기 위해선 항상 왼쪽 괄호가 오른쪽 괄호보다 먼저 나와야 하기 때문에 sum이 0보다 작아지면 false를 return한다. 또한 모든 괄호를 읽었을 때는 왼쪽괄호와 오른쪽괄호의 쌍이 맞아야 하므로 sum이 0이어야 한다.
코드
package Level2; public class 올바른괄호 { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(solution(")()")); } static boolean solution(String s) { boolean answer=true; char[]c=new char[s.length()]; for(int i=0;i<s.length();i++) { c[i]=s.charAt(i); } int sum=0; for(char ch:c) { if(sum<0) return false; if(ch=='(') sum++; else if(ch==')') sum--; } if(sum!=0) return false; return answer; } }
'알고리즘연습 > Programmers' 카테고리의 다른 글
[프로그래머스] 숫자 문자열과 영단어 java (0) | 2021.10.15 |
---|---|
[프로그래머스] 행렬테두리 회전하기 java 자바 (0) | 2021.06.26 |
[프로그래머스] 기능개발 java 자바 (0) | 2021.05.21 |
[프로그래머스] 예산 java 자바 (0) | 2021.05.20 |
[프로그래머스] 폰켓몬 java 자바 (0) | 2021.05.19 |