ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 17404. [Python]RGB거리 2
    Python_알고리즘/Gold IV 2024. 9. 2. 20:35

    1. 문제

     

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

     

    2. 접근 방법

     

    • 시간 제한: 0.5초
    • 메모리 제한: 128MB
    • DP

     

    3. 파이썬 코드

     

    import sys
    
    input = sys.stdin.readline
    
    N = int(input())
    
    houses = []
    # 최소값 저장 변수
    result = 10**9
    # 집 마다 색에 대한 값
    for _ in range(N):
        houses.append(list(map(int,input().split())))
    # 빨, 파, 초 선택하는 범위
    for i in range(3):
        # dp 값 각각 0번 집 어느 색을 선택한지에 대한 초기화
        dp = [[10**9] * 3 for _ in range(N)]
        # dp 첫 인덱스 값 갱신
        dp[0][i] = houses[0][i]
        # N번 DP 까지 값 갱신
        for j in range(1,N):
            dp[j][0] = min(dp[j-1][1],dp[j-1][2]) + houses[j][0]
            dp[j][1] = min(dp[j-1][0],dp[j-1][2]) + houses[j][1]
            dp[j][2] = min(dp[j-1][0],dp[j-1][1]) + houses[j][2]
        # 결과값 출력할 반복문 => i번 인덱스와 N 번인덱스는 같으면 안되기 때문에 결과값에서 제외
        for k in range(3):
            if k != i:
                result = min(result,dp[N-1][k])
    print(result)

     

    4. 문제를 풀고난 후 생각

     

    • 모든 집에 대해서 DP를 실행할 생각을 못하고 있었다. 고민을 1시간정도 한 후 질문 게시판의 질문을 읽어보며 문제에 접근방법을 깨달았다.
    • 첫 집에 대해서 R,G,B 각각 인덱스를 초기값으로 선언해준 후 그 값으로 이후 모든 DP를 채워나가는 방식으로 문제를 해결했다.
    • 문제의 조건인 N번 집의 경우 N-1 과 1 번 집이랑 색이 같으면 안되는거 아닌가? 라는 질문에 대해서는 result 값을 갱신하는 과정에서 i 번째 색( 처음 집을 색칠한 색 ) 을 제외하고 min 값을 구해주는 것으로 해결할 수 있었다.
    • DP를 접근하는 방식에 있어서 아직 많이 미흡한 점이 있고 이를 보완하기 위해 꾸준히 접근하는 것 밖에 없을 것 같다.... ㅜㅜ

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • DP

    'Python_알고리즘 > Gold IV' 카테고리의 다른 글

    2631. [Python]줄세우기  (0) 2024.10.12
    10159. [Python]저울  (0) 2024.09.19
    1806. [Python]부분합  (0) 2024.08.19
    9252. [Python]LCS 2  (0) 2024.06.20
    1253. [Python] 좋다  (1) 2024.03.13

    댓글

Designed by Tistory.