728x90
반응형
1. 문제요약 (2800. 괄호 제거)
2800번: 괄호 제거
첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개
www.acmicpc.net
2. 풀이를 위한 부연 설명
- 괄호의 위치를 스택을 통해 구현한다
- 각 괄호의 쌍을 뽑아내야하므로 스택을 사용한다.
- 괄호 쌍을 "포함한다/포함하지 않는다" 이 두 가지 경우에 대한 모든 수를 알아보기 위해 조합을 사용한다.
- 파이썬 itertools의 combinations를 이용해 경우의 수를 구한다.
- 여러 가지 같은 경우가 나올 수 있으므로 set()으로 답을 넣는다.
- 조합에 대한 자세한 개념 설명과 연관 문제는 다음 링크를 참고하면 된다.
[코테 알고리즘] 파이썬 기본 / 관련 문제
본 글은 "나동빈"님의 [이것이 코딩 테스트다]를 참고하여 작성하였으며, 필자가 직접 문제를 풀며 관련된 문제들을 찾아 정리하였습니다. 파이썬 기본 수 자료형 round 반올림 round(실수형 데이터
daradarav.tistory.com
3. 코드
<python />
import sys
input = sys.stdin.readline
from itertools import combinations
exp = list(input().rstrip())
brackets = []
stack = []
for i in range(len(exp)):
if exp[i] == "(":
stack.append(i)
elif exp[i] == ")":
brackets.append((stack.pop(), i))
answer = set()
for i in range(len(brackets)):
for comb in list(combinations(brackets, i+1)):
tmp = exp[:]
for c in comb:
tmp[c[0]] = ""
tmp[c[0]] = ""
answer.add("".join(tmp))
for item in sorted(list(answer)):
print(item)
4. 기억할 점
- 모든 조합의 경우의 수를 구하는 반복문을 기억해두면 좋을 것 같다.
<python />
for i in range(len(brackets)):
for comb in list(combinations(brackets, i+1)):
tmp = exp[:]
for c in comb:
tmp[c[0]] = ""
tmp[c[0]] = ""
answer.add("".join(tmp))
반응형
'코딩 테스트 > 파이썬 문제 풀이' 카테고리의 다른 글
[백준] 13164번 파이썬 - 그리디, 정렬 (0) | 2024.02.27 |
---|---|
[백준] 1654번 파이썬 - 이분탐색 (0) | 2024.02.27 |
[백준] 1918번 파이썬 - 스택 (1) | 2024.01.27 |
[백준] 16113번 파이썬 - 문자열, 구현 (1) | 2024.01.25 |
[백준] 1931번 파이썬 - 그리디 (0) | 2024.01.19 |