[프로그래머스]정수 삼각형 - DP

2021. 12. 31. 17:49·SW개발/코딩테스트

https://programmers.co.kr/learn/courses/30/lessons/43105

 

코딩테스트 연습 - 정수 삼각형

[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

programmers.co.kr

 

Top Down 방법

def solution(triangle):
    height = len(triangle)
    
    # Top-down 방법으로 풀이
    for i in range(1, height):
        for j in range(i+1):
            print(i, j)
            # 가장 왼쪽의 경우 왼쪽수를 모두 더하면서 내려감
            if j == 0:
                triangle[i][j] += triangle[i-1][j]
            # 가장 오른쪽의 경우 오른쪽수를 모두 더하면서 내려감
            elif j == i:
                triangle[i][j] += triangle[i-1][j-1]
            # 그외의 경우 윗단계의 두 수중 큰 값을 더하면서 내려감
            else:
                triangle[i][j] += max(triangle[i-1][j-1], triangle[i-1][j])
    
    answer = max(triangle[-1])
    return answer

해당 유형의 문제를 풀 때 이용되는 방법으로 2가지가 존재한다. 첫번째는 직관적으로 생각나는 Top Down 방법이다.

즉, 위에서부터 연산을 하면서 아래로 내려가는 방법이다. 

 

문제 해결 Point

해당 문제에서는 내려가는 3가지의 방법이 존재한다.

  1. 가장 왼쪽라인만 더하면서 내려가는 경우
  2. 가장 오른쪽라인만 더하면서 내려가는 경우
  3. 나머지 라인의 경우 더 큰값을 고르면서 내려가는 경우

먼저, 앞의 2가지의 경우는 최댓값을 고를 필요가 없으므로 고정되어있다. 가운데 라인의 경우는 아래 존재하는 두개의 수들중 큰 값을 더하면서 내려가면 된다.

최종적으로 가장 마지막 라인중 최댓값을 출력하면 문제를 해결할 수 있다.

 

Bottom Up 방법

def solution(triangle):
    height = len(triangle)
    
    for i in range(height-1, 0, -1):
        for j in range(i):
            # 바로 윗 단계에서의 최댓값은, 아랫단계 두개중 큰 값과 더한 값이다.
            triangle[i-1][j] += max(triangle[i][j], triangle[i][j+1])
            
    answer = triangle[0][0]
    return answer

 

문제 해결 Point

이번에는 반대의 방법인 Bottom Up 방법이다.

바로 윗단계의 최댓값을 하나 아래에 위치한 두 값중 큰 값과 더한 값으로 갱신해나가면서 꼭대기까지 올라가면 문제를 해결할 수 있다.

 

 


 

위에서 제시한 알고리즘으로 모두 풀어보았는데, Top Down의 경우 생각나는대로 직관적으로 코딩을 할 수 있었고, Bottom Up의 경우에는 약간 까다롭지만 코드적으로 깔끔하게 문제를 해결할 수 있다고 생각한다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[LeetCode]Roman to Integer  (0) 2023.03.18
[LeetCode]Two Sum  (0) 2023.03.18
[프로그래머스]N으로 표현 - DP  (0) 2021.12.31
[프로그래머스]여행경로 - DFS/BFS  (0) 2021.12.13
[프로그래머스]단어 변환 - DFS/BFS  (0) 2021.12.12
'SW개발/코딩테스트' 카테고리의 다른 글
  • [LeetCode]Roman to Integer
  • [LeetCode]Two Sum
  • [프로그래머스]N으로 표현 - DP
  • [프로그래머스]여행경로 - DFS/BFS
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (307)
      • SW개발 (303)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (1)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    오픈소스
    컨트리뷰터
    플레이스토어
    django
    배공파용
    g
    음식
    트리 #AVL #알고리즘 #자료구조
    Contributor
    라이프 스타일
    배달비 공유
    어플리케이션
    배달
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[프로그래머스]정수 삼각형 - DP
상단으로

티스토리툴바