[자료구조] 동적계획법 Dynamic Programming / 파이썬 Python

2022. 8. 3. 12:03·python/자료구조 & 알고리즘
728x90
반응형

동적계획법 (Dynamic Programming)

처음에 나온 해답을 통해서 그다음 문제의 해답을 구한다.

간단히 말해 '점화식'을 이용하여 문제를 풀어나감

 

메모이제이션을 하는 것 => 리스트에 저장

 

메모이제이션 X => 그저 재귀함수

 

예제 문제를 풀면서 감을 익혀나가는 것이 가장 중요.

 

예제문제 1. 네트워크 선 자르기

- 1m 선을 자를 때 경우의 수: 1가지

- 2m 선을 자를 때 경우의 수: 2가지

1 + 1

2

- 3m 선을 자를 때 경우의 수: 2 + 1 = 3가지

1) 마지막 선의 길이를 1m로 한다고 하자,

남은 선의 길이는 2m이다. 2m 선을 자르는 경우의 수는 2가지

2) 마지막 선의 길이를 2m로 한다고 하자,

남은 선의 길이는 1m이다. 1m 선을 자르는 경우의 수는 1가지

 

- 4m 선을 자를 때 경우의 수:

1) 마지막 선의 길이를 1m로 한다고 하자,

남은 선의 길이는 3m이다. 3m 선을 자르는 경우의 수는 3가지

2) 마지막 선의 길이를 2m로 한다고 하자,

남은 선의 길이는 2m이다. 2m 선을 자르는 경우의 수는 2가지

 

.

.

.

따라서 N번째 선을 자를 때 경우의 수는 N-1 번째 경우 + N-2 번째 경우이다.

 

 

풀이 1

n = int(input())

dy = [0]* (n+1) # 0을 포함하여 n개 => n+1

dy[1] = 1
dy[2] = 2
for i in range(3,n+1):
    dy[i]=dy[i-1] + dy[i-2]

print(dy[n])

 

풀이 2 (DFS 이용)

def DFS(len):
    if dy[len]>0:
        return dy[len]
    if len==1 or len==2:
        return len
    else:
        dy[len]=DFS(len-1)+DFS(len-2)
        return dy[len]

if __name__=="__main__":
    n=int(input())
    dy=[0]*(n+1)
    print(DFS(n))
728x90
반응형

'python > 자료구조 & 알고리즘' 카테고리의 다른 글

캐시(페이지) 교체 알고리즘: LRU(Least Recently Used)  (0) 2022.08.24
[자료구조] 재귀 함수와 스택 / 파이썬 Python  (0) 2022.08.03
[자료구조] 우선순위 큐(Priority Queue)와 힙(Heap) / Python 파이썬  (0) 2022.07.29
[자료구조] 트리 Tree / Python 파이썬  (0) 2022.05.25
[자료구조] 연결 리스트 Linked-List / Python 파이썬  (0) 2022.05.12
'python/자료구조 & 알고리즘' 카테고리의 다른 글
  • 캐시(페이지) 교체 알고리즘: LRU(Least Recently Used)
  • [자료구조] 재귀 함수와 스택 / 파이썬 Python
  • [자료구조] 우선순위 큐(Priority Queue)와 힙(Heap) / Python 파이썬
  • [자료구조] 트리 Tree / Python 파이썬
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    Python
    programmers
    소수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[자료구조] 동적계획법 Dynamic Programming / 파이썬 Python
상단으로

티스토리툴바