난이도 : D2
문제번호 : 4866
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
주어진 입력에서 괄호 {}, ()가 제대로 짝을 이뤘는지 검사하는 프로그램을 만드시오. 예를 들어 {( )}는 제대로 된 짝이지만, {( })는 제대로 된 짝이 아니다. 입력은 한 줄의 파이썬 코드일수도 있고, 괄호만 주어질 수도 있다. 정상적으로 짝을 이룬 경우 1, 그렇지 않으면 0을 출력한다. print(‘{‘) 같은 경우는 입력으로 주어지지 않으므로 고려하지 않아도 된다. |
입력
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50 다음 줄부터 테스트 케이스 별로 온전한 형태이거나 괄호만 남긴 한 줄의 코드가 주어진다. |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
3 |
#1 1 #2 1 #3 0 |
2. 문제풀이
파이썬 스택 1일차 연습문제 중 하나인 괄호검사 문제이다. 이 문제를 풀기 위해서는 스택에 대하여 알아야 한다. stack이란 LIFO(Last in First out)의 형식을 가지고있으며 나중에 들어온 내용이 먼저 나가는 구조이다. 파이썬에서는 스택을 리스트로 간단하게 만들 수 있다.
문제는 여는 괄호라면 스택에 넣고 닫는 괄호라면 스택에 있는 내용을 꺼내어 비교한다. 매우 간단한 문제였다? |
3. 소스코드
match_dict = {'}': '{', ')': '('}
def solution(user_input):
arr = []
for s in user_input:
if s == '(' or s == '{':
arr.append(s)
elif s == ')' or s == '}':
if len(arr) == 0 or arr[len(arr) - 1] != match_dict[s]:
return 0
arr.pop()
if len(arr) != 0:
return 0
return 1
for t in range(int(input())):
print('#{} {}'.format(t+1, solution(input())))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
그래프 경로 Python(SW Expert Academy) (2) | 2020.03.07 |
---|---|
종이붙이기 Python(SW Expert Academy) (0) | 2020.03.06 |
글자수 Python(SW Expert Academy) (0) | 2020.03.04 |
문자열 비교 Python(SW Expert Academy) (0) | 2020.03.03 |
회문 Python(SW Expert Academy) (0) | 2020.03.02 |
댓글