ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1106번 호텔 JAVA
    알고리즘 2025. 8. 8. 21:01

    요구사항 정의

    • C원을 사용하면 N명을 늘릴 수 있는 도시들 존재
    • 도시들을 이용하여 C명이상의 사람들을 모으는 최소 비용을 구하기

     

    제약 조건

    • C <= 1000
    • N <= 20
    • P <= 100

     

    풀이 방법

    4번 넘게 틀린 문제이다.

    배낭 문제와 상당히 유사하지만 새로운 유형(?)이었다.

     

    변수는 cost, people이었다.

    그래서 dp[i]가 의미하는 것을 정했는데 

     

    처음에는 "i명의 사람이 지불하는 최소 비용"으로 생각했고 중간에 막혔다.. 

    다시 풀 때는 생각을 바꿔서 "i원을 사용했을 때 얻을 수 있는 최대 사람 수"로 생각했다. 

     

    dp[i] = max(dp[i], dp[i-cost] + people)

     

    점화식은 다음과 같이 구성했고 특정 도시를 새로 할 것인가? 말 것인가?를 계산했다. 

     

     

    이외에도 다음과 같은 문제를 겪었다.

     

    - 최대 비용 계산

    최대 비용을 계산하는데 어려움을 겪었다. 

    내 처음 생각은 `C*N`이면 최대 비용이지 않을까? 생각했지만

    정답은 `C*P` 였다.

     

    최악의 경우 P원을 사용하더라도 1명밖에 안모인다면, C명을 모집하려면 `C*P`가 필요했다.

     

     

    - 깨달은점

    DP를 풀 때는,

    • 모든 변수를 정의할 것
    • dp 배열의 의미를 정의해볼 것

     

     

    코드

     

     

    '알고리즘' 카테고리의 다른 글

    백준 4883번 삼각 그래프 JAVA  (0) 2025.10.22
    백준 1744번 수 묶기  (0) 2025.10.07
    백준 17835번 면접보는 승범이네 JAVA  (2) 2025.07.21
    백준 14226번 이모티콘 JAVA  (0) 2025.07.06
    백준 1707번 이분 그래프 JAVA  (0) 2025.05.09
Designed by Tistory.