티스토리 뷰

💻JAVA 코드 바로보기



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

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.


제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

🌼 JAVA 알고리즘


□초기화면








□풀이과정

시작위치의 괄호가 닫는 괄호이거나, 끝위치의 괄호가 여는 괄호일 경우 바로 false를 return하고,
여는괄호(open)와 닫는괄호(close)의 개수를 비교하여 같으면 true, 다르면 false를 return했다.
class Solution { boolean solution(String s) { boolean answer = false; int open = 0, close = 0; //시작과 끝의 괄호 체크 if(s.charAt(0)==')'||s.charAt(s.length()-1)=='(') return false; for(int i=0;i<s.length();i++){ if(s.charAt(i)=='(') open++; else close++; } if(open==close) answer= true; else answer= false; return answer; } }

테스트 5번과 11번이 실패하여 다른 경우를 생각해보니, 지금 코드와 같이 여는 괄호와 닫는 괄호의 개수만을 비교하는것을 정확하지 않다는 것을 알았다.
예를 들어,

((( )((( ))))))





□완성코드

class Solution { 
	boolean solution(String s) { 
    	boolean answer = false;
        int open = 0, close = 0; //시작과 끝의 괄호 체크
        if(s.charAt(0)==')'||s.charAt(s.length()-1)=='(')
        	return false;
        for(int i=0;i<s.length();i++){
        	if(s.charAt(i)=='(') open++;
            else close++;
            if(open-close==-1) return false;
         }
         if(open==close) answer= true; 
         else answer= false; 
         return answer; 
     } 
}







링크

 

About Me

💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com

code-review.tistory.com

 

 

코딩테스트 연습 - 올바른 괄호

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

programmers.co.kr

 

댓글