ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ 17069 파이프 옮기기 2(python 3)
    알고리즘/BOJ 2019. 4. 11. 02:41
    반응형

     

    파이프 옮기기 2의 코드는 python 3으로 제출해도 됩니다.

     

    파이프 옮기기 2는 1과 다르게 시간 제한이 1초에서 0.5초로 줄어들었고, N의 범위가 3~16에서 3~32로 늘어났습니다.

     

    이 문제는 DP로 풀 수 있습니다.

    이번엔 칸에 칠해진 색깔과 파이프의 색깔을 살펴봐야합니다.

     

    노란색 파이프(→)처럼 놓일려면 아래 두 방법중에 하나를 이용해야 합니다.(배열 좌표는 x, y라고 가정)

    1) x, y-1인 노란색 파이프(→)

    2) x, y-1인 파란색 파이프(↘)

     

    파란색 파이프(↘)처럼 놓일려면 아래 세 방법중에 하나를 이용해야 합니다.

    1) x-1, y-1인 노란색 파이프(→)

    2) x-1, y-1인 파란색 파이프(↘)

    3) x-1, y-1인 초록색 파이프(↓)

     

    초록색 파이프(↓)처럼 놓일려면 아래 두 방법중에 하나를 이용해야 합니다.

    1) x-1, y인 파란색 파이프(↘)

    2) x-1, y인 초록색 파이프(↓)

     

    각각 파이프처럼 놓일려면 위에 나온 방법을 각각 전부 더해주면 됩니다.

     

     

     

     

     

     

     

     

     

     

     

     

    완성된 코드는 이렇습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    = int(input())
    = [[*map(int, input().split())] for _ in range(n)]
    = [[[0* 3 for _ in range(n)] for __ in range(n)]
    S[0][1][0= 1
    for i in range(2, n):
        if D[0][i] == 1: break
        S[0][i][0= 1
    for i in range(1, n):
        for j in range(2, n):# → 0 ,↘ 1, ↓ 2
            if D[i][j] == 0:
                S[i][j][0= S[i][j - 1][0+ S[i][j - 1][1]
                S[i][j][2= S[i - 1][j][1+ S[i - 1][j][2]
                if D[i - 1][j] == D[i][j - 1== 0:
                    S[i][j][1= sum(S[i - 1][j - 1])
    print(sum(S[n - 1][n - 1]))
    cs

    5~7줄에 대해 설명하자면 맨 윗 줄은 전부 노란색 파이프 밖에 설치하지 못하니 그 점을 이용해서 맨 윗줄은 벽을 만나지 않을 때 까지 값을 설정해줍니다.

    이렇게 설정해주면 범위 체크를 해주지 않아도 됩니다.

    반응형

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

    [BOJ 5585, C++] 거스름돈  (0) 2021.07.26
    [BOJ 2810, C++] 컵홀더  (0) 2021.07.26
    BOJ 17070 파이프 옮기기 1(python 3)  (0) 2019.04.11
    BOJ 17135 캐슬 디펜스(Python 3)  (0) 2019.04.08
    BOJ 13905 세부(Python 3)  (0) 2019.03.12

    댓글

Designed by Tistory.