티스토리 뷰
SMALL
오늘의 문제
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
내 풀이
def solution(s):
answer = False # 초기값 설정
stack = []# stack 리스트 생성
for i in range(len(s)): # 문자열 s의 길이만큼 반복
if not stack: # stack이 비어 있을 때
if s[i] == ")": # 인덱스 i가 ")"면 -> 짝을 이루는 "("가 앞에 없는데 ")"가 나온다는 뜻이니까
return answer # 올바르지 않은 괄호
else: # 인덱스 i가 "("면
stack.append(s[i]) # stack에 push
else: # stack에 값이 존재할 때
if stack[-1] != s[i]: # stack의 top과 인덱스 i의 값이 다르면
stack.pop() # 괄호가 짝을 이루는 것이므로 stack을 pop
else: # 값이 같으면
stack.append(s[i]) # 인덱스 i의 값을 stack에 push
if not stack: # s를 다 돌아본 후 stack이 비어 있다면
answer = True # 모든 괄호가 짝을 이루었다는 것이므로 True
return answer
아주 과거에 Swift로 백준에서 비슷한 문제를 풀었던 기억
뭐 이지하네요
주석을 상세하게 적어두었습니다만... 문제 풀이의 포인트를 정리해 보자면!
포인트 1) s를 맨 앞부터 하나씩 돌면서, stack의 top(= stack[-1])과 비교한다.
짝을 이루는 괄호라면 stack에서 top을 제거 -> pop
짝을 이루지 않는다면 (ex. "(" 다음 "("가 들어오는 경우) stack에 s[i]를 append -> push
포인트 2) stack이 비어 있다는 것의 의미를 알기.
stack이 비어 있는 경우는 1) for문의 가장 첫 번째 턴일 경우 또는 2) 이전의 턴에서 모두 짝을 이루었을 경우 이렇게 2가지 경우밖에 없다. 이를 이용하여 if not stack 조건일 때에 s[i]가 ")"라면, 짝을 이루는 "("가 앞에 없다는 뜻이 된다. 이때 바로 return answer를 통해 False로 for문을 종료하여 빠르게 처리할 수 있다.
감사합니다 행복하세요~!
LIST
'Algorithm' 카테고리의 다른 글
백준 5525번: IOIOI (S1) - Python 풀이 (0) | 2025.01.18 |
---|---|
백준 11723번: 집합 - Python 풀이 (0) | 2025.01.17 |
프로그래머스 Lv.2: 주식가격 - Python 풀이 (1) | 2025.01.15 |
백준 1406번: 에디터 - Python 풀이 (0) | 2025.01.14 |
프로그래머스 스택/큐: 기능개발 - Python 풀이 (0) | 2025.01.13 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 이분탐색
- 정렬
- 큐
- 코테준비
- Programmers
- BFS
- Baekjoon
- 프로그래머스
- 힙
- 다이나믹프로그래밍
- 백트래킹
- swea
- ios앱개발
- 투포인터
- 구현
- ios
- 그리디
- MySQL
- Swift
- 우선순위큐
- 자료구조
- 코테
- Python
- 백준
- SQL
- 스택
- Swift로백준풀기
- 코딩테스트
- dp
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함