solve 3xn 타일링
This commit is contained in:
parent
88fb1fc685
commit
ce51ec2abc
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
**/__pycache__
|
||||
35
3xn타일링/README.md
Normal file
35
3xn타일링/README.md
Normal file
@ -0,0 +1,35 @@
|
||||
# [3xn 타일링](https://school.programmers.co.kr/learn/courses/30/lessons/12902)
|
||||
|
||||
## 문제 설명
|
||||
가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 3이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다
|
||||
|
||||
타일을 가로로 배치 하는 경우
|
||||
타일을 세로로 배치 하는 경우
|
||||
예를들어서 n이 8인 직사각형은 다음과 같이 채울 수 있습니다.
|
||||
|
||||
Imgur
|
||||
|
||||
직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.
|
||||
|
||||
## 제한사항
|
||||
가로의 길이 n은 5,000이하의 자연수 입니다.
|
||||
경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.
|
||||
|
||||
## 입출력 예
|
||||
n result
|
||||
4 11
|
||||
|
||||
## 입출력 예 설명
|
||||
### 입출력 예 #1
|
||||
다음과 같이 11가지 방법이 있다.
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
Imgur
|
||||
10
3xn타일링/solution.py
Normal file
10
3xn타일링/solution.py
Normal file
@ -0,0 +1,10 @@
|
||||
memo = {0: 0, 2: 3}
|
||||
def solution(n):
|
||||
if n in memo:
|
||||
return memo[n]
|
||||
if n % 2 == 1:
|
||||
return 0
|
||||
|
||||
answer = sum([solution(i*2) * 2 for i in range((n-2)//2)] + [solution(n-2) * 3] + [2])
|
||||
memo[n] = answer
|
||||
return answer % 1000000007
|
||||
13
3xn타일링/test.py
Normal file
13
3xn타일링/test.py
Normal file
@ -0,0 +1,13 @@
|
||||
from solution import solution
|
||||
|
||||
test_cases = {
|
||||
(0,): 0,
|
||||
(1,): 0,
|
||||
(2,): 3,
|
||||
(3,): 0,
|
||||
(4,): 11,
|
||||
(6,): 3*3*3 + 3*2*2 + 2,
|
||||
}
|
||||
|
||||
for i, o in test_cases.items():
|
||||
print('input', *i, '\toutput', o, '\tsolution', solution(*i))
|
||||
16
run.py
16
run.py
@ -2,17 +2,21 @@
|
||||
import argparse
|
||||
import sys
|
||||
import os
|
||||
import importlib
|
||||
|
||||
problems = [
|
||||
'예상대진표'
|
||||
'예상대진표',
|
||||
'3xn타일링',
|
||||
]
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('problem',
|
||||
choices=problems)
|
||||
parser.add_argument('--problems', type=list,
|
||||
choices=problems,
|
||||
default=problems[-1:])
|
||||
args = parser.parse_args()
|
||||
print(args.problem)
|
||||
for problem in args.problems:
|
||||
print(problem)
|
||||
|
||||
sys.path.append(os.path.join(os.getcwd(), args.problem))
|
||||
__import__(args.problem, fromlist=['test'])
|
||||
sys.path.append(os.path.join(os.getcwd(), problem))
|
||||
__import__(problem, fromlist=['test'])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user