[BOJ] 3986. 좋은 단어

2025. 7. 21. 14:03·BOJ

📌 문제 제목

문제 링크: BOJ 3986

🗒️ 문제 설명

좋은 단어: 단어 위로 아치형 곡선을 긋는다. 선끼리 교차하지 않으면서 각 글자를 정확히 한 개의 다른 위치에 있는 같은 글자와 짝 지을 수 있다면, 좋은 단어이다.

좋은 단어 개수를 세는 프로그램

시간 제한: 1초

메모리 제한: 256MB

1 <= 단어의 개수 <= 100

2 <= 단어의 길이 <= 100,000


💡 문제 해결 아이디어

  •  단어 위로 아치형 곡선을 그었을 때, 각 선끼리 교차하지 않아야 "좋은 단어" 이다.
  • e.g. ABAB 처럼 각 알파벳끼리 선으로 이었을 때, 선이 교차하므로 이 단어는 "좋은 단어"가 아니다.
  • 문자열을 순회하며 스택의 마지막 원소가 현재 확인중인 문자와 같으면 아치형 곡선을 그었을 때 다른 선들이 침범할 수 없으므로 pop
  • 스택의 마지막 원소가 현재 확인 중인 문자와 다르면 스택에 추가

⌛️ 시간 복잡도

  • O(L_1 + L_2 + L_3 + ... + L_n) ==입력된 모든 문자열 길이의 합에 비례

✅ 최종 코드

import sys
input = sys.stdin.readline

N = int(input().strip())
count = 0
for _ in range(N):
    word = input().strip()
    stk = []

    for w in word:
        if stk and w == stk[-1]:
            stk.pop()
        else:
            stk.append(w)
    if not stk:
        count += 1

print(count)

 

'BOJ' 카테고리의 다른 글

[BOJ] 10799. 쇠막대기  (0) 2025.07.21
[BOJ] 9012. 괄호  (0) 2025.07.21
[BOJ] 4949. 균형잡힌 세상  (0) 2025.07.21
[BOJ] 12852. 1로 만들기 2  (0) 2025.07.17
[BOJ] 11659. 구간 합 구하기 4  (0) 2025.07.17
'BOJ' 카테고리의 다른 글
  • [BOJ] 10799. 쇠막대기
  • [BOJ] 9012. 괄호
  • [BOJ] 4949. 균형잡힌 세상
  • [BOJ] 12852. 1로 만들기 2
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • BOJ (28)
      • 알고리즘 (4)
      • TIL (0)
      • Project (1) N
  • 인기 글

  • 태그

    stack
    투 포인터
    BFS
    Zelda
    PriorityQueue
    Algorithm
    DFS
    Next.js
    Project
    backtracking
    BOJ
    dp
    PYTHON
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
[BOJ] 3986. 좋은 단어
상단으로

티스토리툴바