땡구리
땡굴 탱굴
땡구리
전체 방문자
오늘
어제
  • 분류 전체보기 (42)
    • AWS (5)
    • 자격증 후기 (8)
    • 백준 풀이 (17)
    • Vue2 (1)
    • Python (0)
    • Elasticsearch (0)
    • FastAPI (0)
    • MySQL (0)
    • 짜잘정보 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개선 가능

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땡구리
백준 풀이

백준 / Python / 1509. 팰린드롬 분할

백준 풀이

백준 / Python / 1509. 팰린드롬 분할

2023. 3. 18. 23:17

https://www.acmicpc.net/problem/1509

문제 요약

주어진 문자열을 팰린드롬으로 나눌때 나누어진 팰린드롬 갯수의 최솟값을 구하라

 

풀이 요약

  1. 각 팰린드롬의 시작점과 끝점을 일단 구해야한다.
  2. dp 를 사용하여 특정 idx 에서 팰린드롬을 적용시킨게 나은지, 빼는게 나은지 dp 에 기록한다.
  3. 마지막 dp 값을 출력한다.

더 나은 방법으로는 팰린드롬을 구하자마자 dp 를 갱신하는 것이다.

이렇게 하면 겹치는 로직이 생겨서 더 빨리 풀 수 있다.

아래는 팰린드롬 구하기와 dp 갱신을 나눈 로직이다.

from sys import stdin
from collections import defaultdict, deque

input = stdin.readline
_MAX = 2500

ipt = input().rstrip()
# start : [end_1, ...]
palindrome = defaultdict(list)

left_idx_queue = deque([])
dp = [_MAX] * len(ipt) + [0]

for idx, curr in enumerate(ipt):
    if 0 < idx:
        left_idx_queue.append(idx)
    if 1 < idx:
        left_idx_queue.append(idx - 1)

    for _ in range(len(left_idx_queue)):
        left_idx = left_idx_queue.popleft()
        if left_idx and ipt[left_idx - 1] == curr:
            palindrome[left_idx - 1].append(idx)
            left_idx_queue.append(left_idx - 1)

for i in range(len(ipt) - 1, -1, -1):
    dp[i] = dp[i + 1] + 1

    for end in palindrome[i]:
        if dp[end + 1] + 1 < dp[i]:
            dp[i] = dp[end + 1] + 1
print(dp[0])

 

저작자표시 (새창열림)

'백준 풀이' 카테고리의 다른 글

백준 / python / 1562. 계단 수  (0) 2023.03.19
백준 / python / 1208. 부분수열의 합 2  (0) 2023.03.13
백준 / python / 16932. 모양 만들기  (0) 2023.03.09
백준 / python / 14502. 연구소  (0) 2023.02.18
백준 / python / 2206. 벽 부수고 이동하기  (0) 2023.02.13
  • 문제 요약
  • 풀이 요약
'백준 풀이' 카테고리의 다른 글
  • 백준 / python / 1562. 계단 수
  • 백준 / python / 1208. 부분수열의 합 2
  • 백준 / python / 16932. 모양 만들기
  • 백준 / python / 14502. 연구소
땡구리
땡구리
잊는게 무서운 겁쟁이

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.