티스토리 뷰

728x90

문제

www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

 

풀이

n의 경우의 수를 몇가지 구해보면, 피보나치 문제와 같은 것을 알 수 있다.

n = 1, 1개

n = 2, 2개

n = 3, 3개

n = 4, 5개

n = 5, 8개

n = 6, 13개

 

소스코드

n = int(input())

dp = [0]*(n)
dp[0] = 1
dp[1] = 2
if n == 1 or n == 2:
    print(dp[n-1])
    exit()
for i in range(2, n):
    dp[i] = dp[i-1]+dp[i-2]
print(dp[n-1]%10007)

위와 같이 코드 구현은 쉬웠으나,,

index error가 반복되어 떴다 ㅠㅠㅠㅠㅠ

왠지 몰라 고민하던 찰라..

굳이 배열을 쓰지 않아도 3가지 변수를 이용해 풀 수 있다는 것을 깨달았다.

n = int(input())

numback1 = 2
numback2 = 1
if n==1:
    print(numback2)
    exit()
elif n==2:
    print(numback1)
    exit()
for _ in range(n-2):
    nownum = numback1+numback2
    numback2 = numback1
    numback1 = nownum
print(numback1%10007)

그리고 마침내 얻은 성공... !!! ㅠㅠ 흑흑

반응형