일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- delete join
- Dynamic Programming
- Spark
- MySQL
- docker container
- 프로그래머스
- 백준온라인저지
- docker
- data_engineer
- 빅데이터를 지탱하는 기술
- SQL
- Python
- 그리디
- airflow webserver
- Pseudo Lab
- BOT
- docker image
- 알고리즘
- hackerrank
- terraform
- 데이터 엔지니어
- 백준 온라인 저지
- Data Engineering
- Airflow
- airflow architecture
- telegram
- leetcode
- dsf
- datacamp
- 2023년 목표
Archives
- Today
- Total
Lim Seunghyun Space
[백준 온라인 저지] 01타일 본문
문제
나만의 풀이
- 00, 1 타일을 사용하여 수열을 생성하기 때문에 N = 1부터 케이스를 따져봤다.
- N = 1이면, 1 으로 총 1개의 2진 수열을 만들 수 있다.
- N = 2이면, 11, 00 으로 총 2개의 2진 수열을 만들 수 있다.
- N = 3이면, 111. 001. 100 으로 총 3개의 2진 수열을 만들 수 있다.
- N = 4이면, 1111, 0011, 0000, 1001, 1100 으로 총 5개의 2진 수열을 만들 수 있다.
- 위의 규칙에서 N = 3까지 보면, N = 2 11, 00 에서 추가되는 건 1 밖에 없기 때문에 N = 3은 N = 2 + N = 1로 생각해볼 수 있었다.
- 위의 규칙을 일반화 하였을 때, function(N) = function(N - 1) + function(N - 2) 로 정의할 수 있어 피보나치와 같이 풀어보았다.
첫번째 코드
def dp(N):
if N <= 2:
return N
else:
return dp(N - 1) + dp(N - 2)
N = int(input())
print(dp(N) % 15746)
- 피보나치 수열을 푸는 방법과 동일하게 코드를 작성하여 제출하였다.
- 위의 코드를 제출하면 메모리 에러가 발생한다.
- N이 커지면 값도 커지기 때문에 메모리 초과가 발생했다고 추측했다. (그래서 마지막에 15746으로 나눴을지도)
두번째 코드
n = int(input())
dp = [0] * 1000001
dp[1] = 1
dp[2] = 2
for i in range(3, n + 1):
dp[i] = (dp[i - 1] + dp[i - 2]) % 15746
print(dp[n])
- 재귀로 풀지 않고 반복문으로 풀었으며, N의 최대 길이만큼 리스트를 생성하여 값을 채워나가는 식으로 변경
Github : https://github.com/Limseunghyun95/code_test/blob/master/baekjoon/p_1904.py
728x90
'Algorithm > 문제' 카테고리의 다른 글
[프로그래머스] 문자열 압축 (0) | 2021.12.05 |
---|---|
[HackerRank] Validating Roman Numerals (0) | 2021.11.21 |
[백준 온라인 저지] 유기농 배추 (0) | 2021.11.10 |
[백준 온라인 저지] 근우의 다이어리 꾸미기 (0) | 2021.10.31 |
[백준 온라인 저지] 등수 매기기 (0) | 2021.10.26 |