일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- CodingTest
- lambda
- level4
- mysql
- coding
- collections
- Queue
- coding test
- 코딩
- counter
- join
- 완전탐색
- Stack
- 데이터분석
- 코테
- 프로그래머스
- sql
- 파이썬
- 코딩테스트
- 시간복잡도
- programmers
- BFS
- Level2
- python
- lv4
- 연습문제
- time complexity
- 조합
- itertools
- import re
- Today
- Total
ror_coding
[Programmers] 2 x n 타일링 - 12900 본문
728x90
내 첫 DP 문제.. 문제를 읽고 dp 로 풀 수 있다는 패턴을 알아내야 한다!
홀/짝일 경우로 나눠서 연산하는 과정으로 풀었는데 테케가 틀리게 된다. 따라서 dp로 풀기.
Question
직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 solution 함수를 완성해주세요.
- 가로의 길이 n은 60,000이하의 자연수 입니다.
- 경우의 수가 많아 질 수 있으므로, 경우의 수를 1,000,000,007으로 나눈 나머지를 return해주세요.
Point
- 부분 문제로 나눌 수 있는가 ?
- 중복 계산이 발생하는가?
- => 위 두 조건이 True이기 때문에 이 문제는 dp로 해결한다.
Code (After)
def solution(n):
n1, n2 = 0,1
for i in range(n):
n2, n1 = n1+n2, n2
return n2 % 1000000007
Code (Before)
from collections import deque
def solution(n):
if n==1 : return 1
elif n==2 : return 2
dp = deque([1,2])
for _ in range(3, n+1):
dp.append(dp.popleft() + dp[0])
return dp[-1] % 1000000007
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/009.gif)
now me
On my github
728x90
'Algorithm > Python' 카테고리의 다른 글
[Programmers] 가장 큰 수 - 42746 (0) | 2024.12.11 |
---|---|
[Programmers] 2개 이하로 다른 비트 - 77885 (0) | 2024.12.11 |
[Programmers] 더 맵게 - 42626 (0) | 2024.12.08 |
[Python] Heap (Priority Queue) (1) | 2024.12.08 |
[Programmers] 게임 맵 최단거리 - 1844 (0) | 2024.12.08 |