프로그래머스 단어 퍼즐 JAVA 풀이 (DP, 시간복잡도)

2026. 5. 5. 08:09·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

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


📌 문제 개요

주어진 단어 조각들을 이용해 문자열을 완성하는 문제이다.
각 단어는 무한히 사용할 수 있으며, 최소 개수로 문자열을 구성해야 한다.

 


📌 접근 방법

  • 문자열을 앞에서부터 구성하는 DP 문제
  • dp[i]를 i까지 문자열을 만들 때 필요한 최소 단어 개수로 정의
  • 단어 최대 길이가 5이므로 뒤에서 최대 5글자만 확인

📌 핵심 아이디어

문자열 최소 분할 문제 = DP

점화식 : dp[i] = min(dp[i - len] + 1)
 

조건 : t.substring(i-len, i) 가 strs 에 포함되어야 함

Set을 사용하여 탐색 최적화


📌 전체 코드

import java.util.*;

class Solution {
    public int solution(String[] strs, String t) {

        int n = t.length();
        int[] dp = new int[n + 1];

        Arrays.fill(dp, Integer.MAX_VALUE);
        dp[0] = 0;

        Set<String> set = new HashSet<>(Arrays.asList(strs));

        for (int i = 1; i <= n; i++) {

            for (int len = 1; len <= 5; len++) {

                if (i - len < 0) continue;

                String sub = t.substring(i - len, i);

                if (set.contains(sub) && dp[i - len] != Integer.MAX_VALUE) {
                    dp[i] = Math.min(dp[i], dp[i - len] + 1);
                }
            }
        }

        return dp[n] == Integer.MAX_VALUE ? -1 : dp[n];
    }
}

 


🧾 정리

  • 문자열 분할 + 최소 개수 → DP 문제
  • 단어 길이 제한(최대 5)을 활용한 최적화가 핵심
  • 시간복잡도 O(N)으로 효율성 통과 가능
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

프로그래머스 나누어 떨어지는 숫자 배열 JAVA 풀이 (정렬, Stream)  (0) 2026.05.06
프로그래머스 순위 JAVA 풀이 (그래프, 플로이드워셜, 순위판별)  (0) 2026.05.05
프로그래머스 스타 수열 JAVA 풀이 (그리디, 시간복잡도)  (0) 2026.05.04
백준 9461번 : 파도반 수열 (JAVA)  (0) 2026.04.27
백준 9654번 : 나부 함대 데이터 (JAVA)  (0) 2026.04.26
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 프로그래머스 나누어 떨어지는 숫자 배열 JAVA 풀이 (정렬, Stream)
  • 프로그래머스 순위 JAVA 풀이 (그래프, 플로이드워셜, 순위판별)
  • 프로그래머스 스타 수열 JAVA 풀이 (그리디, 시간복잡도)
  • 백준 9461번 : 파도반 수열 (JAVA)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    level0
    Level2
    배열
    피보나치
    알고리즘
    정처기
    구현
    정보처리기사 실기 기출문제
    자바
    자료구조
    정처기실기
    정보처리기사
    정처기오답노트
    실기
    정렬
    코딩테스트
    수학
    dp
    springboot
    level1
    백엔드개발자
    solved.ac
    java
    시뮬레이션
    문자열
    백준
    프로그래머스
    기출문제
    브루트포스
    완전탐색
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
프로그래머스 단어 퍼즐 JAVA 풀이 (DP, 시간복잡도)
상단으로

티스토리툴바