[BOJ] 3986. 좋은 단어

Jimeaning·2023년 4월 10일
0

코딩테스트

목록 보기
69/143

Python3

문제

입출력

입출력 예시

키워드

  • 구현
  • 스택

주요 포인트

괄호 문제와 비슷하게 풀 수 있는 스택 문제이다.

단어의 수 n개를 입력받는다.

반복문 (n까지)
문자열 s를 입력받는다.
스택을 선언한다. (반드시 반복문 안에서!)

이중 반복문 (s 문자열)
만약 스택의 길이가 0이면 리스트에 j를 넣는다
스택에 들어 있으면

  • j가 A일 때,
    - 스택의 마지막 원소가 B라면 스택에 A를 넣는다.
    • 스택의 마지막 원소가 A라면 스택에서 뺀다.
  • j가 B일 때,
    - 스택의 마지막 원소가 A라면 스택에 B를 넣는다.
    • 스택의 마지막 원소가 B라면 스택에서 뺀다.

만약 스택의 길이가 0이라면 ans 변수에 1을 더한다.

최종 코드

n = int(input())
ans = 0

for i in range(n):
    s = input()
    st = []
    
    for j in s:
        if len(st) == 0:
            st.append(j)
        else:
            if j == 'A':
                if st[-1] == 'B':
                    st.append(j)
                elif st[-1] == 'A':
                    st.pop()
            elif j == 'B':
                if st[-1] == 'A':
                    st.append(j)
                elif st[-1] == 'B':
                    st.pop()
                    
    if len(st) == 0:
        ans += 1

print(ans)

피드백

스택을 활용해야 하는 문제였다.
먼저 스택의 길이에 따라서 나누고, 들어온 문자가 A인지 B인지 판단해서 같은 문자가 연속되면 pop하고 다른 문자면 스택에 넣어준다.
문자열 끝까지 했을 때 스택의 길이가 0이면 좋은 단어이다.

비슷한 문제

  1. 쇠막대기

https://velog.io/@jimeaning/BOJ-10799.-%EC%87%A0%EB%A7%89%EB%8C%80%EA%B8%B0

profile
I mean

0개의 댓글