문제
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
올바른 괄호 쌍을 알아내는 문제이다.
올바른 괄호라는 것은 '('라는 문자가 있을 시 이에 대응하는 ')' 문자가 하나만 존재하는 것을 의미한다.
그럼 ()(()) 이것은 올바른 괄호라고 할 수 있을까?
정답은 '그렇다'이다.
우리는 이것이 짧을 때에는 하나하나 읽으면서 찾을 수 있지만 과연 이게 길어졌을 때는 어떻게 알아낼 수 있을까?
단순하게 생각을 해봤을 때에 여는 괄호의 갯수와 닫는 괄호의 갯수가 같기만 하면 되지 않을까라는 의문이 생긴다.
(()), ()() 언뜻 보기에는 그럴 듯 해보인다.
하지만 다음과 같은 상황이라면 어떨까? ))((, )()()( 이렇다면 틀릴 수 있다.
여기서 KeyPoint는 매칭이 돼야한다는 것이다. 고로 닫는 괄호는 여는 괄호가 나오기 직전까지 나오면 안 된다는 것이다.
고로 여는 괄호가 있을 때에는 저장을 해두었다가 닫는 괄호가 나올 때 여는 괄호가 이전에 있었는지 체크를 한다는 것이다.
마지막으로 절때로 빠져서는 안되는 경우가 있다.
분명 매칭이 돼야한다고 했으니 저장된 여는 괄호가 모두 매칭이 됐는지 확인해줘야 한다.
1. 현재 보고 있는 문자가 여는 괄호라면 저장한다.
2. 닫는 괄호라면 이전에 저장해둔 문자가 여는 괄호인지 확인한다.
3. 문자를 모두 처리 후 저장된 문자가 있는지 확인한다.
정답코드
'''
'25. 08. 05
1. 올바른 괄호의 쌍을 알아내어라.
2. () 이런 것이 올바른 괄호
3. )( 이런 것은 올바른 괄호가 아니다.
1. 현재 보고 있는 문자가 단순히 ( 라면 스택에 넣는다.
2. )라면 스택에 ( 문자가 있는지 확인한다.
3. 없다면 해당 괄호는 성립할 수 없으므로 false 리턴한다.
4. 모든 문자를 다 마친 뒤 스택에 괄호가 남아있다면 이 문자열도 성립할 수 없는 괄호이다.
'''
def solution(s):
answer = True
stack = []
for word in s:
if word == '(':stack.append(0)
#스택 안에 있는지 확인
else:
if stack:stack.pop()
#없는 경우
else:
answer = False
break
if stack: answer = False
return answer
깃허브 : https://buly.kr/4xXwf1N
동영상 : https://youtu.be/mxGit6OZNiM
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 투포인터 / 숫자의 표현 (0) | 2025.08.07 |
|---|---|
| 프로그래머스 / 구현 / 이진 변환 반복하기 (0) | 2025.08.06 |
| 프로그래머스 / 문자열 / JadenCase 문자열 만들기 (0) | 2025.08.06 |
| 프로그래머스 / 정렬 / 최솟값 만들기 (0) | 2025.08.05 |
| 프로그래머스 / 구현 / 최댓값과 최솟값 (0) | 2025.08.05 |