문제 링크

문제 요약

2 x N 크기의 직사각형을 “L-트로미노” 조각들로 타일링하는 가능한 경우의 수를 계산하는 문제입니다.

풀이

이 문제는 2 x N 보드 타일링에 대한 전형적인 Dynamic Programming 문제처럼 보이지만, 사실 간단하게 해결 가능합니다.

  1. 먼저, 만약 N이 홀수라면, 절대 타일링이 불가능합니다.
  2. N이 짝수인 경우 2 ** (N // 2) 가 답이 됩니다.
    • L-트리미노 조각을 2칸 내에 배치하는 경우의 수는 2입니다.
    • L-트리미노 조각이 2칸 을 넘어 겹쳐서 배치할 수 있는 경우의 수는 존재하지 않습니다. 따라서 무조건 2칸씩 쪼개서 배치하게 됩니다.

정답 코드

def solve():
  n = int(input())
 
  if n % 2 == 1:
    return 0
 
  return 2 ** (n // 2)
 
 
if __name__ == "__main__":
  tc = ii()
  for t in range(1, tc+1):
    ret = solve()
    print(ret)
 

연관 페이지

참고 문헌 / 사이트