KWiOS
KWiOS0101
KWiOS
  • 분류 전체보기 (108)
    • Algorithm (41)
      • 이코테 (14)
      • 이코테 문제풀이 (21)
      • 프로그래머스 (6)
    • CS (1)
      • 모두를 위한 컴퓨터 과학(CS50 2019) (0)
    • iOS (15)
    • Swift (36)
      • Swift문법 (32)
      • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
KWiOS

KWiOS0101

다이나믹 프로그래밍 - 바닥 공사(Swift)
Algorithm/이코테 문제풀이

다이나믹 프로그래밍 - 바닥 공사(Swift)

2022. 8. 9. 19:30
본 내용은 '이것이 취업을 위한 코딩테스트다 with 파이썬' 책을 기반으로 포스팅 하였습니다.

 

문제

저작권 문제가 될 수 있어 문제는 삭제합니다.

 

풀이 코드

let n = 3

var dp = Array(repeating: 0, count: 1000 + 1)

// n = 1일때 경우의 수
dp[1] = 1
// n = 2일때 경우의 수
dp[2] = 3

for i in 3..<n+1 {
    dp[i] = (dp[i-1] + dp[i-2] * 2) % 796796
}

print(dp[n]) // 5

/*
 # 가로 n , 세로 2 #
 
 덮개의 종류 3가지로 바닥의 가로N이 아래와 같을때 채울수 있는 경우의 수는
 n = 1 일때 경우의 수 => 1
 n = 2 일때 경우의 수 => 3
 n = 3 일때 경우의 수 => 5
 
 덮개중 제일 큰 사이즈가 2x2이기 때문에 N - 2 미만의 길이에 대해서는 고려할 필요 없음
 
 점화식을 구해보면
 i-1 길이까지 덮개가 채워져 있을때 남은 바닥을 채울수 있는 경우의 수는 2x1 사이즈의 덮개 하나밖에 없으므로 경우의 수가 1개가 된다.
 i-2 길이까지 덮개가 채워져 있을때 남은 바닥을 채울수 있는 경우의 수는 1x2 사이즈의 덮개 2개, 2x2 사이즈의 덮개 1개로 경우의 수가 2개가 된다.
 
 dp[i] = dp[i-1] + dp[i-2] * 2
 
 i = 3
 dp[i-1] => 3
 dp[i-2] => 1
 
 dp[i-2] * 2 => 2
 
 최종적으로는 3가지 경우 + 2가지 경우 = 5
 */

 

문제 풀이

주석 참고

 

'Algorithm > 이코테 문제풀이' 카테고리의 다른 글

최소경로 - 미래 도시  (0) 2022.08.13
다이나믹 프로그래밍 - 효율적인 화폐 구성(Swift)  (0) 2022.08.09
다이나믹 프로그래밍 - 개미 전사(Swift)  (0) 2022.08.09
다이나믹 프로그래밍 - 1로 만들기(Swift)  (0) 2022.08.09
이진 탐색 - 떡볶이 떡 만들기(Swift)  (0) 2022.08.09
    'Algorithm/이코테 문제풀이' 카테고리의 다른 글
    • 최소경로 - 미래 도시
    • 다이나믹 프로그래밍 - 효율적인 화폐 구성(Swift)
    • 다이나믹 프로그래밍 - 개미 전사(Swift)
    • 다이나믹 프로그래밍 - 1로 만들기(Swift)
    KWiOS
    KWiOS

    티스토리툴바