본문 바로가기

문제 풀이

2xn 타일링

문제

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

 

제한 사항

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

 

문제를 보고 든 생각

적어보면 뭔가 규칙이 보이지 않을까 싶었다.그래서 무작정 노트에 타일을 그렸다.

 

나의 아이디어

규칙이 보이긴 보였다.n이 짝수일 때마다 새로운 규칙이 만들어졌고, 타일이 늘어나는 개수도 규칙적인 모습이 있었다.하지만 이건 코드로 짤 수가 없는 규칙이라는 생각이 들었고 분명 다른 규칙성이 있을 것 같았다.

 

답답한 마음에 결국 검색을 이용했다.

 

검색을 통해 알게 된 내용

내가 규칙성을 찾기 위해 노트에 적은 그 내용들이 이미 정답을 말해주고 있었다.정답은 열의 크기가 바뀔 때마다 변하는, 만들 수 있는 조합의 총 개수의 규칙성을 찾는 것이었다.즉, 타일의 크기당 조합할 수 있는 총 개수를 확인하면 규칙성을 찾을 수가 있었다.

 

하지만 나는 정말 딱 그것만 확인을 하지 않았다...총 개수에 연관성이 있을 거라고는 전혀 생각하지 않았기 때문이었다...

 

검색을 통해 알게 된 풀이

 

n = int(input())
table = [0] * 1001
table[0] = 1
table[1] = 2

for i in range(2, n):
    table[i] = (table[i-2] + table[i-1]) % 10007
print(table[n-1])

코드는 내가 작성했지만, 아이디어는 검색을 통해 알 수 있었다.

 

결과

 

느낀점

진짜 너무 아쉽다.

스스로 충분히 풀어낼 수 있는 문제였다.

그냥 좀만 더 들여다 볼 걸 그랬다.

다음부터는 답답해도 참아보자.

 

 

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

설탕 배달  (1) 2023.03.28
메뉴 리뉴얼  (0) 2023.03.24
설탕 배달  (0) 2022.11.25
인싸가 되고 싶은 민수  (0) 2022.11.19
뉴스 클러스터링  (0) 2022.11.15