수식의 괄호 쌍
수식의 괄호 쌍
💫 정의
32 - {6 - (2 + 4) * 7}
-> {()}
O
5 + {6 - (12 + 4} * 7)
-> {(})
X
주어진 괄호 문자열이 올바른지/균형잡혔는지 판단하는 문제.
🫧 괄호가 한 종류일 때
- 안쪽부터 짝을 맞춰 지워나간다, 모두 지워진다면 올바른 문자열
- 여는 괄호와 닫는 괄호 수를 비교한다, 수가 다르면 올바르지 않은 문자열
- 수가 같다고 올바른 문자열인 것은 아님 (i.e.
))((
)
- 수가 같다고 올바른 문자열인 것은 아님 (i.e.
🫧 괄호가 여러 종류일 때
- 안쪽부터 짝을 맞춰 지워나간다, 모두 지워진다면 올바른 문자열
🫧 관찰
문자열을 앞에서부터 읽어나갈 때,
닫는 괄호는 남아있는 괄호 중에서 가장 최근에 들어온 여는 괄호와 짝을 지어 없애버리는 명령이라고 생각해도 된다.
💫 Solve By Stack
🫧 왜 Why
배열을 이용한 구현
최대 N번 중간 원소의 삭제가 발생 O(N2)
연결 리스트을 이용한 구현
O(N)
🫧 구현
여는 괄호를 읽을 때 마다 저장하다가 닫는 괄호를 읽을 때 가장 최근에 들어온, 즉 가장 끝에 있는 여는 괄호의 짝을 이루게 해주고 pop를 하면 올바른 괄호 쌍인지 확인할 수 있다.
- 여는 괄호가 나오면 스택에 추가
- 닫는 괄호가 나왔을 경우,
- 스택이 비어있으면 올바르지 않은 괄호 쌍
- 스택의 top이 짝이 맞지 않는 괄호일 경우 올바르지 않은 괄호 쌍
- 스택의 top이 짝이 맞는 괄호일 경우 pop
- 모든 과정을 끝낸 후 스택에 괄호가 남아있으면 올바르지 않은 괄호 쌍, 남아있지 않으면 올바른 괄호 쌍
🫧 백준
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.