https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Python
  • 최소힙
  • python3
  • BFS
  • 프로그래머스
  • 다이나믹 프로그래밍
  • 다이나믹프로그래밍
  • 그래프
  • 12015
  • counter
  • MST
  • DFS
  • DP
  • 유클리드호제법
  • 큐
  • 이분 탐색
  • 유니온 파인드
  • 백준
  • 최단경로
  • 재귀함수
  • 그리디
  • 이분탐색
  • 파이썬
  • 다익스트라
  • heapq
  • 재귀
  • LIS
  • 최대공약수
  • 백트래킹
  • 스택

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

백준 1932 풀이 (동적 계획법)
알고리즘

백준 1932 풀이 (동적 계획법)

2021. 2. 19. 16:25

저번 문제가 1149 였는데 이때 굉장히 신기한 방식을 사용했다. 재귀로 풀어야할것 같은 최댓값 최소값을 구할때 뒤로 더해서 누적값을 만들어 주면 모든 경우를 염두하여 푸는 방식이 된다.

만약 이 삼각형의 각 층별 총합을 구하여 최댓값을 구하려면 재귀함수를 써야한다. 문제는 이러한 경우 재귀함수의 호출 갯수가 비약적으로 많아지게 된다는 것이다.

그래서 저번 1149 문제에서는 누적값을 만들어서 최솟값을 구했다. 이번에도 비슷한 방식으로 누적값을 만들어서 최댓값을 구하면된다.

 

아래에서 부터 어떤 선택을 할때 최댓값이 되는지 구하면서 올라가면 1층의 7은 최댓값으로 값이 변경된다.

코드는 굉장히 간단해진다.

n = int(input())
tmp = []
for _ in range(n):
    tmp.append(list(map(int,input().split())))

for i in range(n-2,-1,-1):
    for j in range(len(tmp[i])):
        tmp[i][j] += max(tmp[i+1][j],tmp[i+1][j+1])
print(tmp[0][0])

'알고리즘' 카테고리의 다른 글

백준 2579 풀이 (다이나믹 프로그래밍, bottom-up, 계단 오르기)  (0) 2021.02.19
다이나믹 프로그래밍(동적 계획법)  (0) 2021.02.19
백준 1149 풀이 (다이나믹 프로그래밍)  (0) 2021.02.19
백준 9461 풀이 (파도반 수열, 메모제이션, 다이나믹 프로그래밍)  (0) 2021.02.19
백준 1904 풀이 (재귀함수 인척하는 점화식 풀이)  (0) 2021.02.18
    '알고리즘' 카테고리의 다른 글
    • 백준 2579 풀이 (다이나믹 프로그래밍, bottom-up, 계단 오르기)
    • 다이나믹 프로그래밍(동적 계획법)
    • 백준 1149 풀이 (다이나믹 프로그래밍)
    • 백준 9461 풀이 (파도반 수열, 메모제이션, 다이나믹 프로그래밍)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바