올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
()()
또는(())()
는 올바른 괄호입니다.)()(
또는(()(
는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
---|---|
()() | true |
(())() | true |
)()( | false |
(()( | false |
입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.
문제의 예시와 같습니다.
문제풀이 IDEA
주어진 문자열에서 '('와 ')'를 count 해서 같으면 True를 출력해주면 된다
그런데 이때 주의해야할게 괄호가 제대로 안닫히 경우에도 갯수만 같으면 우리가 기대하는 것과 다르게 True로 처리해버릴수 있다는 것이다.
따라서 '(' 와 ')'를 각각 1과 -1에 대응해서 규칙을 찾아보면
기본적으로 True가 나와야 하는 속성은 0 일때고
괄호가 깨지는 순간은 0 밑으로 내려갈때 즉 ) 얘가 ( 보다 선행해서 나올때이다
이를 기반으로 if문으로 짜주면 되겠다나의 코드
def solution(s):
cnt = 0 #cnt 로 '('와 ')'의 갯수를 counting해주기로 한다
for i in s:
if i == '(':
cnt += 1
else:
cnt -= 1
if cnt < 0: #만약 cnt 값이 0 밑으로 내려가는 것은 )가 (보다 많이 나왔다는 뜻이므로
return False #괄호가 성립하지 않는다.
if cnt == 0: #그리고 for문이 끝난뒤에 cnt 값이 0일때만 괄호가 제대로 열리고 닫혔다는 의미이므로
return True #True를 리턴해준다
return False
다른 코드
if cnt == 0:
return True
return False
위의 코드를 아래의 코드로 바꿔 적어줄 수 있는데 비교연산자가 return하는 값이 boolean값인 것을 이용한 코드이다 기억하고 사용하자
return open_cnt == 0
출처 : 프로그래머스
댓글 없음:
댓글 쓰기