일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 칭기스칸 동상
- 게르
- 백준
- 알고리즘
- 헬스
- 테를지국립공원
- 독일
- 소프트웨어 아카데미
- 담슈타트
- LG글로벌챌린저
- 월드프렌즈 ICT 봉사단
- SWEA
- 칭기즈칸
- 몽골 고기
- 몽골
- 아부다비
- algorithm
- 초원
- 한 줄로 서기
- Python
- 테를지
- 몽골요리
- 몽골 헬스장
- ICT봉사단
- 파이썬
- 교환학생
- 여행
- 코로나
- 울란바토르
- 월드프렌즈
Archives
- Today
- Total
맛있는물회
[맛있는물회] <SWEA알고리즘> 4869번 "종이붙이기" 본문
문제 조건
어린이 알고리즘 교실의 선생님은 경우의 수 놀이를 위해, 그림처럼 가로x세로 길이가 10x20, 20x20인 직사각형 종이를 잔뜩 준비했다.
그리고 교실 바닥에 20xN 크기의 직사각형을 테이프로 표시하고, 이 안에 준비한 종이를 빈틈없이 붙이는 방법을 찾아보려고 한다. N이 30인 경우 다음 그림처럼 종이를 붙일 수 있다.
10의 배수인 N이 주어졌을 때, 종이를 붙이는 모든 경우를 찾으려면 테이프로 만든 표시한 영역을 몇 개나 만들어야 되는지 계산하는 프로그램을 만드시오. 직사각형 종이가 모자라는 경우는 없다.
Input
첫 줄에 테스트 케이스 개수 T가 주어진다. 1≤T≤50
다음 줄부터 테스트 케이스 별로 N이 주어진다. 10≤N≤300, N은 10의 배수
Output
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다.
생각한 아이디어
간단하고 전형적인 DP 문제이다. 오랜만에 푸는 DP문제라서 접근법이 잘 생각나지 않았지만 피보나치 문제를 다시 떠올리며 접근하였더니 아주 쉽게 풀렸다.
dp[n-1] + |
dp[n-2]+ ㅁ
dp[n-2] + =
이렇게 3가지 방법을 생각하면 된다.
따라서 원하는 부분의 식은
num = dp[i-1] + dp[i-2] * 2
이 된다.
소스코드
T = int(input())
for TC in range(1, T + 1):
N = int(input())
dp = list()
dp.append(1)
dp.append(3)
for i in range(2,N//10):
num = dp[i-1] + dp[i-2] * 2
dp.append(num)
print("#%d %d" %(TC, dp[i]))
*파이썬 문법 정리
'IT > 알고리즘' 카테고리의 다른 글
[맛있는물회] <SWEA알고리즘> 4871번 "그래프 경로" (0) | 2020.04.05 |
---|---|
[맛있는물회] <SWEA알고리즘> 4866번 "괄호검사 " (0) | 2020.04.05 |
[맛있는물회] <SWEA알고리즘> 4865번 "글자수" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4861번 "회문" (0) | 2020.04.02 |
[맛있는물회] <SWEA알고리즘> 4864번 "문자열 비교" (0) | 2020.04.02 |
Comments