알고리즘/백준

백준 [11726]: 2×n 타일링

개발하는 장씨 2025. 1. 14. 00:33

📌 백준 [11726]: 2×n 타일링

🔗 문제 링크


문제 설명 📄

2×n 크기의 직사각형을 1×2와 2×1 타일로 채우는 방법의 수를 구하시오.
결과를 10007로 나눈 나머지를 출력하시오.


문제 접근 방식 💡

  • 동적 프로그래밍(DP)을 사용하여 타일 채우는 방법의 수를 계산.
  • dp[i]를 2×i 크기의 직사각형을 채우는 방법의 수로 정의.
  • 점화식:
    • dp[i] = dp[i-1] + dp[i-2]
  • 초기값:
    • dp[1] = 1
    • dp[2] = 2

Solution 💻

n = int(input())

dp = [1] * n

for i in range(2, n):
    dp[i] = dp[i - 1] + dp[i - 2]

print(dp[-1])

시간 복잡도 분석 ⏲️

  • 시간 복잡도: O(n)
    • 1부터 n까지 반복문을 통해 DP 배열을 채움.

공간 복잡도 분석 🗄️

  • 공간 복잡도: O(n)
    • dp 배열이 n 크기로 사용됨.

리팩토링 🛠️

n = int(input())

if n == 1:
    print(1)
else:
    prev1, prev2 = 1, 2

    for i in range(3, n + 1):
        prev1, prev2 = prev2, prev1 + prev2

    print(prev2)

시간 복잡도 분석 ⏲️

  • 시간 복잡도: O(n)
    • 반복문으로 n번 계산.

공간 복잡도 분석 🗄️

  • 공간 복잡도: O(1)
    • 상수 크기의 변수만 사용.