728x90
반응형
※ 문제링크
※ 기본문제
※ 문제풀이
def check(PS):
result_list = [] # 결과확인을 위한 리스트 생성
for i in range(len(PS)): # )이 먼저나오면 절대로 YES가 될수 없음
if PS[0] == ')':
return 'NO'
else:
for i in range(len(PS)):
result_list.append(PS[i])
if len(result_list) >= 2: # 괄호를 2개이상 입력받았을 때부터 확인 후 제거실시
if result_list[-2] + result_list[-1] == '()':
result_list.pop()
result_list.pop()
if len(result_list) != 0:
return 'NO'
else:
return 'YES'
import sys # 시간최소화를 위한 sys사용
T = int(input())
# T = int(sys.stdin.readline())
for i in range(T):
PS = input()
# PS = sys.stdin.readline().rstrip()
if i != T-1:
sys.stdout.write(f'{check(PS)}\n')
else:
sys.stdout.write(f'{check(PS)}')
해당문제는 스택을 활용하여 푸는 문제였다. 정상적인 VPS가 되기 위해서는 처음시작이 반드시 '('로 시작해야한다고 생각하여 ')'로 시작하는 문자열들은 추가적인 탐색을 하지않고 바로 'NO'가 출력되게끔 작성하였고, 괄호가 2개이상이 되었을 때부터는 이전에 입력받은 문자와 입력할 문자가 '()'를 이루면 리스트에서 제거되게끔 작성하였다. 문제를 풀고 채점할때까지만 해도 인지하지 못했는데 해당 코드는 사실 잘못작성된 부분이 있다. 위의 코드는 입력할 문자를 리스트에 추가후 비교하고 pop을 2번 실행하여 제거를 해주고 있는데 이렇게하면 시간과 메모리 손실이 발생하게 된다. 해당코드만으로도 통과는 되겠지만, 보다 빠르게 처리를 해주고 싶다면, 입력할 문자와 직전에 입력한 문자와 바로 비교를 하고 직전문자만 제거하는 형태로 수정하여 사용하면 될 것 같다. 그 후 최종적으로 리스트에 괄호가 있으면 'NO'를 괄호가 없으면 'YES'출력하게끔 함수를 작성하였고, 파이썬에서의 시간 단축을 위해 sys를 활용하여 출력하게끔 코드를 작성하였다.
P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.
728x90
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 15652번 N과 M (4) / 사용언어 : 파이썬(python) (0) | 2021.12.16 |
---|---|
[BOJ] 15651번 N과 M (3) / 사용언어 : 파이썬(python) (0) | 2021.12.16 |
[BOJ] 10773번 제로 / 사용언어 : 파이썬(python) (0) | 2021.12.16 |
[BOJ] 10828번 스택 / 사용언어 : 파이썬(python) (0) | 2021.12.16 |
[BOJ] 15650번 N과M(2) / 사용언어 : 파이썬(python) (0) | 2021.12.16 |
댓글