백준_9012번

정소담·2023년 1월 27일
0

BOJ Short Review

목록 보기
20/44
post-thumbnail

9012번 괄호

입력받는 문자열이 정상적힌 괄호의 형태인지 아닌지 구분하는 문제.

# 카운트를 활용한 코드 작성
for i in range(int(input())): # 테스트 케이스 개수 입력
    n = input() # 문자열 입력
    cnt = 0 # 카운트해줄 변수 생성
    for x in n:
        if x == '(': # 여는 괄호를 만나면 +1
            cnt += 1
        else:
            cnt -= 1 # 닫는 괄호를 만나면 -1
            if cnt < 0: # 만약 닫는 괄호가 더 많아서 음수가 된다면 
            # 정상 괄호의 형태가 아니므로 NO 출력하고 break
            # 여기서 출력하는 문자의 대소문자를 확실히 확인해야 한다.
                print('NO')
                break
    else:
        if cnt == 0: # 여는 괄호와 닫는 괄호 개수가 동일하여 카운트가 0이면 YES
            print('YES')
        elif cnt > 0: # 닫는 괄호가 부족하면 NO
            print('NO')

최근 CS 공부를 하면서 알게된 스택을 활용해 2안을 작성해 보았다.

for i in range(int(input())): # 테스트 케이스 입력
    n = input() # 문자열 입력
    m = [] # 스택을 활용할 빈 공간 생성
    try: # 빈 리스트에서 pop하여 언더플로우가 발생 되어 error가 발생할 경우를 위해 
    	# 예외 처리를 해주었다.
        for x in n:
            if x == '(': # 여는 괄호를 만나면
                m.append(x) # 리스트에 스택
            else:
                m.pop() # 닫는 괄호를 만나면 최근에 쌓은 요소를 pop(후입선출)
        if len(m) == 0: # 리스트의 길이가 0이면 괄호의 짝이 맞으므로 YES 출력
            print('YES')
        else:
            print('NO') # 0이 아니면 NO
    except IndexError: #언더플로우로 인덱스 에러 발생시
        print('NO') # NO 출력
profile
Hi ! I'm newbie :)

0개의 댓글