Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- EER
- riceteacatpanda
- 인턴 지원
- 동읍면 DB
- Forensic 절차
- mysql
- jsp
- spring
- 방명록 만들기
- 3단계 지역 DB
- react
- PyAmdecoder
- JSTL
- webhacking 처음
- reversing.kr
- 정보보호병 후기
- Layered Architecture
- 소개딩
- restapi
- 네이버 인턴
- 행정지역 DB
- Database
- Django
- DBMS
- 소프트웨어 개발보안 경진대회
- 인턴 후기
- frontend
- SessionAttribute
- 메모리 포랜식
- ㅁㅇㅂ??ㅇㅈㄷ ㅎㅇㅌ...
Archives
- Today
- Total
웹찢남
[백준 2800 괄호 제거 문제] PYTHON 본문
골드 5문제지만 최근 풀었던 것 중 가장 시간이 오래걸렸다..
히든 케이스를 찾느라 오래걸리기도 했고 itertools의 combinations를 몰라
더럽게 코딩을 할까 고민을 하며 찾아보다 combinations를 찾아 시간이 더 오래걸렸다.
이번 문제는 우선 문자열을 list로 변환하고 괄호의 짝을 찾아 표시를 했다.
예를 들어 [(,1,+,(,2,+,1,),)] 이라하면[1,0,0,2,0,0,0,2,1] 이런식으로 먼저 짝을 찾은 후
각각의 짝을 인덱스로 묶었다. 위를 예로 들어 [(0,8),(3,7)] 이런식으로
그 후 해당 리스트를 combinations를 사용해 모든 경우를 찾았다.
나는 괄호를 지우는 case를 찾아 [[(0,8)],[(3,7)],[(0,8),(3,7)]] 이렇게 나온다.
이걸 for문을 통해 괄호로 지우면 끝난다.
import itertools
ina = input()
count = 1
lenina = len(ina)
arrina = [0]*lenina
stacknum = []
stacknum2 = []
where = []
for i, arr in enumerate(ina):
if arr == '(':
arrina[i] = count
stacknum.append(count)
stacknum2.append(i)
count += 1
elif arr == ')':
arrina[i] = stacknum.pop()
where.insert(0, [i, stacknum2.pop()])
count -= 1
answer = []
case = []
for i in range(1, count+1):
case.extend(list(itertools.combinations(where, i)))
for cas in case:
tmpina = list(ina)
for ca in cas:
for c in ca:
tmpina[c] = ' '
answer.append(''.join(tmpina).replace(" ", ""))
answer = set(answer)
answer = list(answer)
for ai in sorted(answer):
print(ai)
'백준 Algorithm' 카테고리의 다른 글
[백준 6603 로또 문제] PYTHON (0) | 2021.08.10 |
---|---|
[백준 15649 N과 M 문제] PYTHON (0) | 2021.08.10 |
[백준 5052 전화번호 목록 문제] PYTHON (0) | 2021.07.27 |
[백준 5430 AC 문제] PYTHON (0) | 2021.07.20 |
[백준 9461 파도반 수열 문제] PYTHON (0) | 2021.07.12 |
Comments