BOJ

[백준/BOJ] python 1904번 01타일

2023. 1. 25. 21:31

언어: python

번호: 1904

제목: 01타일

등급: 실버 3

​

풀이:

N=1 > 1

N=2 > 00, 11

N=3 > 100, 001, 111

N=4 > 0000, 0011, 1001, 1100, 1111

N=5 > 10000, 00100, 11100, 00001, 00111, 10011, 11001, 11111

N=i일때 N=i-1일 때와 N=i-2일때를 보면 규칙을 찾을 수 있다. N=i일때 N=i+1인 2진 수열을 만드려면, 앞에서 만든 2진 수열에 1을 붙이거나, 1을 떼고 00을 붙여야 한다. 이때 N-1인 수열의 뒤에 1을 붙이고, N-2인 수열 뒤에 00을 붙이면 중복 없이 새로운 2진 수열을 만들 수 있다. 길이가 N인 모든 2진 수열의 개수는 N번째 피보나치 수와 같다.

​

​

코드:

# 1904 X 
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])
​

 

 

메모:

DP, dynamic Programming, 동적 계획법은 하나의 큰 문제를 여러 개의 작은 문제로 나누어서, 그 결과를 다시 큰 문제를 해결할 때 사용하는 것을 말한다고 한다. 이것만 보면 재귀함수와 유사한다. 차이점은 재귀는 작은 문제의 결과를 기억하지 않는다. 매번 새로 구하는 것이다. 하지만 DP는 그 결과를 저장해 보다 효율적으로 계산할 수 있다.

① Overlapping Subproblems

큰 문제가 같은 여러 개의 작은 문제로 나뉠때 사용한다.

② Optimal Substructure

큰 문제의 크기와 상관 없이 작은 문제의 답이 같다.

이 두가지 조건을 만족해야 DP를 사용할 수 있다.

'BOJ' 카테고리의 다른 글
  • [백준/BOJ] python 9506번 약수들의 합
  • [백준/BOJ] python 8958번 OX퀴즈
  • [백준/BOJ] python 1010번 다리 놓기
  • [백준/BOJ] python 7568번 덩치
kyj0015
kyj0015
kyj0015
기록용 블로그
kyj0015
전체
오늘
어제
  • 분류 전체보기 (79)
    • BOJ (41)
    • Project (4)
    • 혼공단 (14)
    • 자기계발 (5)
      • 독서 (5)
      • 영상 (0)
      • 스크랩 (0)
    • 메모 (0)
    • IT (2)
    • 논문 리뷰 (1)
      • 자연어처리 (11)
      • 강화학습 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 딥려닝
  • 학부연구생
  • 딥러닝
  • Mahotas
  • 혼공머신
  • 혼공컴운
  • 머신러닝
  • 독서
  • 혼공학습단
  • BOJ
  • Algorithm
  • 파이썬
  • python baekjoon
  • Baekjoon
  • 혼공단
  • PYTHON
  • 깃허브
  • 알고리즘
  • RL
  • 독후감
  • 메타버스
  • 논문리뷰
  • 데니스홍_활
  • python 파이썬
  • 백준
  • 자료구조
  • 혼공
  • paper
  • nlp
  • 회귀

최근 댓글

최근 글

hELLO · Designed By 정상우.
kyj0015
[백준/BOJ] python 1904번 01타일
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.