본문 바로가기

Algorithm/BaekJOON(Python)

[백준/DP/11726] 2×n 타일링

이미지 클릭시, 문제로 이동됩니닷 :)

sol1 FAIL - 런타임에러

import sys

# 2*n 크기의 직사각형을 채우는 방법의 수 % 10007

input = sys.stdin.readline
n = int(input())

# 직사각형 방법의수 : 1,2,3,5... => An = An-1 + An-2 
# 2*n => 경우의 수 구할때 키포인트 : 2행으로 고정 => ll or ㅡㅡ

# 입력값 보다 큰 리스트 하나 선언 > 찾은 규칙값을 준다.
dp = [0 for i in range(n+1)]
dp[1]=1
dp[2]=2

# 0번째, 1번째, 2번째 직사각형은 구했으니 3번째 직사각형부터 구한다.
# range 함수는 미만이니깐 n 만큼 돌리고 싶으면 n+1
for i in range(3,n+1):
  dp[i] = (dp[i-1]+dp[i-2])

print(dp[n] % 10007)

sol2

import sys

# 2*n 크기의 직사각형을 채우는 방법의 수 % 10007

input = sys.stdin.readline
n = int(input())

# 직사각형 방법의수 : 1,2,3,5... => An = An-1 + An-2 
# 2*n => 경우의 수 구할때 키포인트 : 2행으로 고정 => ll or ㅡㅡ

# 입력값 보다 큰 리스트 하나 선언 > 찾은 규칙값을 준다.
dp = [0]*1001
dp[1]=1
dp[2]=2

# 3번째 직사각형부터 구한다.
# range 함수는 미만이니깐 n 만큼 돌리고 싶으면 n+1
for i in range(3,1001):
  dp[i] = (dp[i-1]+dp[i-2])

print(dp[n] % 10007)

4회 제출만에 성공했다.

1 try > 틀렸습니다. => 잘못제출;

2,3 try > 조건문 안에서 % 연산을 수행

4,5 try => 코드 제출시에는 주석 삭제, dp 리스크 크기 > 주어진 조건 범위+1 으로 수정.