본문 바로가기

Algorithm

SWEA 4869 종이붙이기 (python)

반응형

 

4869. [파이썬 S/W 문제해결 기본] 4일차 - 종이붙이기

 

파이썬 SW문제해결 기본 - Stack1

2021.06.05 - [Algorithm] - SWEA 4869 종이붙이기 (python)

2021.06.05 - [Algorithm] - SWEA 4866 괄호검사 (python)

2021.06.05 - [Algorithm] - SWEA 4871 그래프 경로 (python)

2021.06.05 - [Algorithm] - SWEA 4873 반목문자 지우기 (python)

 

 

문제

어린이 알고리즘 교실의 선생님은 경우의 수 놀이를 위해, 그림처럼 가로x세로 길이가 10x20, 20x20인 직사각형 종이를 잔뜩 준비했다.

img

그리고 교실 바닥에 20xN 크기의 직사각형을 테이프로 표시하고, 이 안에 준비한 종이를 빈틈없이 붙이는 방법을 찾아보려고 한다. N이 30인 경우 다음 그림처럼 종이를 붙일 수 있다.

img

10의 배수인 N이 주어졌을 때, 종이를 붙이는 모든 경우를 찾으려면 테이프로 만든 표시한 영역을 몇 개나 만들어야 되는지 계산하는 프로그램을 만드시오. 직사각형 종이가 모자라는 경우는 없다.

 

[입력]

첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50
다음 줄부터 테스트 케이스 별로 N이 주어진다. 10≤N≤300, N은 10의 배수

 

[출력]

각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.

 

코드

T = int(input())

def tape(N):
    # 만약 N의 길이가 20이라면 3가지 방법밖에 없음
    if N == 20:
        return 3
    # 만약 10이 남았다면 남은 경우의 수는 1가지 밖에 없음
    elif N == 10:
        return 1
    # 아니라면 세로가 왔을때와 가로가 왔을때 두가지 경우가 생김
    # 하지만 가로의 경우 2가지가 생김
    return tape(N-10) + 2*tape(N-20)

for tc in range(1, T+1):
    N = int(input())
    result = tape(N)
    print("#{} {}".format(tc, result))

반응형

'Algorithm' 카테고리의 다른 글

SWEA 4871 그래프 경로 (python)  (0) 2021.06.05
SWEA 4866 괄호검사 (python)  (0) 2021.06.05
BOJ 6603 로또 (python)  (0) 2021.06.03
BOJ 18187 평면분할 (python)  (0) 2021.05.18
BOJ 7576 토마토 (python)  (0) 2021.05.18