일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Spark
- 2023년 목표
- SQL
- hackerrank
- Data Engineering
- docker container
- Airflow
- MySQL
- delete join
- 프로그래머스
- BOT
- 데이터 엔지니어
- 알고리즘
- 백준온라인저지
- Python
- airflow webserver
- 백준 온라인 저지
- airflow architecture
- terraform
- docker image
- 그리디
- dsf
- Dynamic Programming
- datacamp
- telegram
- docker
- 빅데이터를 지탱하는 기술
- Pseudo Lab
- data_engineer
- leetcode
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 |