백준 1010번 다리 놓기
< 백준 1010번 다리 놓기 - 마포 코딩박 >
사용한 알고리즘: DP
강의 서쪽에 N개, 동쪽에 M개의 사이트가 있을 때, N개의 다리를 놓을 수 있는 경우의 수를 구하는 문제입니다.
문제풀이는 다음과 같습니다.
(1) (코드 5~6)
'dp[a][b] = 서쪽 a개, 동쪽 b개 일때 a개의 다리를 놓을 수 있는 경우의 수' 로 설정했습니다.
(2) (코드 9~10)
초기값 dp[1][i] = i 입니다. 즉 서쪽 1개, 동쪽 i 개 일때, 1개의 다리를 놓는 경우는 i가지 입니다.
(3) (코드 11~20)
동쪽 i개, 서쪽 j개 인 경우수는 (i-1)(j-1), (i-1)(j-2), ... (i-1)(j-1) 의 각 경우에다 위에 다리 하나 더 놓는경우라고 생각할 수 있습니다.
즉 dp[i][j] = dp[i-1][j-1] + dp[i-1][j-2] + ... + dp[i-1][i-1] 입니다.
( dp[i][j] 에서 i>j 인 경우수는 0 입니다. )
예를들어 dp[3][5] = dp[2][4] + dp[2][3] + dp[2][2] 입니다.
이를 통해 dp값을 계산합니다.
사용한 알고리즘: DP
강의 서쪽에 N개, 동쪽에 M개의 사이트가 있을 때, N개의 다리를 놓을 수 있는 경우의 수를 구하는 문제입니다.
문제풀이는 다음과 같습니다.
(1) (코드 5~6)
'dp[a][b] = 서쪽 a개, 동쪽 b개 일때 a개의 다리를 놓을 수 있는 경우의 수' 로 설정했습니다.
(2) (코드 9~10)
초기값 dp[1][i] = i 입니다. 즉 서쪽 1개, 동쪽 i 개 일때, 1개의 다리를 놓는 경우는 i가지 입니다.
(3) (코드 11~20)
동쪽 i개, 서쪽 j개 인 경우수는 (i-1)(j-1), (i-1)(j-2), ... (i-1)(j-1) 의 각 경우에다 위에 다리 하나 더 놓는경우라고 생각할 수 있습니다.
즉 dp[i][j] = dp[i-1][j-1] + dp[i-1][j-2] + ... + dp[i-1][i-1] 입니다.
( dp[i][j] 에서 i>j 인 경우수는 0 입니다. )
예를들어 dp[3][5] = dp[2][4] + dp[2][3] + dp[2][2] 입니다.
이를 통해 dp값을 계산합니다.
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!