본문 바로가기
Programming/Programmers

[프로그래머스] 단어 퍼즐(Python)

by 데이터현 2021. 12. 22.

https://programmers.co.kr/learn/courses/30/lessons/12983

 

코딩테스트 연습 - 단어 퍼즐

단어 퍼즐은 주어진 단어 조각들을 이용해서 주어진 문장을 완성하는 퍼즐입니다. 이때, 주어진 각 단어 조각들은 각각 무한개씩 있다고 가정합니다. 예를 들어 주어진 단어 조각이 [“ba”, “na

programmers.co.kr

dp 활용 문제다. 처음에 그리디 + dfs로 풀었는데 시간 초과가 났다.

 

dp를 생각하긴 했는데 dp에 익숙하지 않아서 다른 사람 풀이를 참고했다.

 

dp를 설계할 때 일반적으로 원하는 답을 설정하면 구하기 쉽다.

 

이 문제는 각 위치에서 단어조각 개수의 최솟값을 return 하는 문제이므로

dp를 각 위치에서의 최소 단어조각 개수로 설정해주고 문제를 풀면 된다.

 

단어 조각의 최대 수는 5개이므로 이를 참고하여 작성한다.

 

import math
def solution(strs, t):
    INF = math.inf
    dp = [INF for _ in range(len(t)+1)]
    dp[0] = 0
    for i in range(1,len(t)+1):
        j = 0 if i < 5 else i - 5
        while j < i:
            if dp[j] + 1 < dp[i] and t[j:i] in strs:
                dp[i] = dp[j]+1
            j +=1
    return dp[len(t)] if dp[len(t)] != INF else -1

 

댓글