https://www.acmicpc.net/problem/4949
문제 분석
1. "."이 입력의 종료 조건으로 주어졌으므로 while문을 이용해 반복문을 만든다.
2. 소괄호와 대괄호의 쌍 여부를 확인해야 하므로 stack 리스트를 이용해 두 경우를 판별한다.
3. 어떠한 하나의 경우라도 문자열이 균형을 이루지 못할 경우 지체 없이 break문을 통해 루프를 탈출하고 no를 출력해야한다.
소스 코드
1. i가 소괄호 ( 이거나 대괄호 [ 일 경우 stack에 해당 괄호를 추가한다.
2. i가 소괄호 ) 이거나 대괄호 ] 일 경우 두가지 case가 있을 수 있다.
- 스택에 left 소괄호나 대괄호가 먼저 들어와 있으며 서로 짝을 이루는 경우
- 스택에 left 소괄호나 대괄호가 없는 경우
첫번째의 경우에는 균형잡힌 문자열에 해당하므로 .pop으로 stack list를 비워준다.
두번째의 경우는 균형잡힌 문자열에 해당하지 않으므로 stack에 해당 괄호를 추가하고 루프를 탈출한다.
3. 최종적으로 stack이 비어있다면 균형잡힌 문자열로 판단하여 요구하는 조건에 알맞게 출력을 해준다.
후기
처음 문제를 보자마자 2주차 list 강의에서 예제로 풀었던 #9012 괄호 문제가 떠올랐는데, 알고보니 비슷한 append와 pop 개념을 이용해 풀었던 것이다. stack을 이용하면 조금 더 직관적이게 문제를 풀 수 있을 것 같다.
'Koala - 9기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/C++] 13235번 팰린드롬 (0) | 2023.01.27 |
---|---|
[백준/python] 2789번 : 유학 금지 (0) | 2023.01.27 |
[백준/python] 2309 일곱 난쟁이 (1) | 2023.01.26 |
[백준/python] 2596번 : 비밀편지 (0) | 2023.01.25 |
[백준/python] 17502번 : 클레어와 팰린드롬 (0) | 2023.01.24 |