김호쭈
DevForYou
김호쭈
전체 방문자
오늘
어제
  • 분류 전체보기 (321)
    • • 데이터베이스(DB) (9)
      • __SQL__ (9)
    • •알고리즘(Algorithm ) (117)
      • 문제풀이 (99)
      • 스터디 (14)
      • 알고리즘 팁 (4)
    • •Compter Science (57)
      • Operating System (25)
      • Computer Network (1)
      • Computer Vision (16)
      • Artificial Intelligence (14)
      • Software Technology (1)
    • • 독서 (36)
      • Design Pattern (24)
      • 객체지향의 사실과 오해 (1)
      • Object Oriented Software En.. (11)
    • • 개발 (26)
      • React (3)
      • node.js (6)
      • Django (11)
      • Spring boot (6)
    • • 개발Tip (4)
      • GitHub (0)
    • •프로젝트 (2)
      • 물물 (2)
    • •App (54)
      • 안드로이드 with Kotlin (50)
      • 코틀린(Kotiln) (4)
    • •회고 (8)
    • •취준일기 (3)
    • • 기타 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • local저장소
  • Remote저장소
  • 로컬저장소
  • ㄱ
  • 깃허브데스크탑
  • GitHubDesktop
  • KMU_WINK
  • 원격저장소

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
김호쭈

DevForYou

[백준1932&파이썬] DP를 이용할때 확정지을 노드를 선택하는 기준과 근거가 필요하다.
•알고리즘(Algorithm )/문제풀이

[백준1932&파이썬] DP를 이용할때 확정지을 노드를 선택하는 기준과 근거가 필요하다.

2023. 5. 9. 16:17

# 문제

백준 1932 정수 삼각형 파이썬 풀이

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

# 코드

import sys

n = int(sys.stdin.readline().strip())

arr = list()
for _ in range(n) :
  line = list(map(int,sys.stdin.readline().split()))
  arr.append(line)

for row in range(1,n):
  for col in range(len(arr[row])) :
    if col == 0 : # 시작점이면
      arr[row][col] += arr[row-1][col]
      continue
    if col == len(arr[row])-1 : # 끝점이면
      arr[row][col] += arr[row-1][col-1]
      continue
    # 그 외 경우인 경우
    arr[row][col] += max(arr[row-1][col], arr[row-1][col-1])

print(max(arr[n-1]))

# 풀이

  • 먼저 문제에서 주어진 정수 삼각형의 틀가 실제 배열로 들어오는 정수 삼각형의 모양이 다르다는 것을 알고, 이 두개가 똑같이 맵핑시킬 수 있는지에 대한 관계를 찾았다.
  • 생각보다 쉽게 바로 아래와 오른쪽 대각선 아래가 쉽게 매핑 됐다. 현재 보는 노드에서 바로 아래와 오른쪽 대각선을 보게 되는 규칙을 가진다.
  • 문제 해결 전략은 현재 노드에서 살펴보는 위의 노드를 비교해보고 현재 자신의 값과 더했을때 최대가 되는 값으로 자신을 확정짓는 방법의 DP를 이용하면 된다.
  • DP의 중요점은 현재 확정지어야하는 노드를 선택하는 방법이고 그 노드를 선택했을때 이후 선택에 영향을 주지 않는 근거가 있어야한다.

  • 다음과 같이 위의 노드를 보게 되는 경우 col(열)이 0번인 경우의 맨끝인 경우는 양쪽을 보지 않고 바로 위 또는 대각선 위만을 보게 된다. 이걸 반복문에서 표현해야 했다.
    if col == 0 : # 시작점이면
      arr[row][col] += arr[row-1][col]
      continue
    if col == len(arr[row])-1 : # 끝점이면
      arr[row][col] += arr[row-1][col-1]
      continue
저작자표시 (새창열림)

'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글

[백준13549&파이썬] BFS에서 큐에 넣을때 때때로 순서도 중요하다.  (1) 2023.05.11
[백준2638&파이썬] BFS에 구현과 시뮬레이션이 섞인 문제  (0) 2023.05.11
[백준9465&파이썬] DP를 풀때는 N이 1일때부터 하나씩 늘려가며 경우의 수를 따져보자.  (0) 2023.05.09
[백준1149&파이썬] DP를 사용할때 확정되는 값에 대한 명확한 근거를 찾자  (1) 2023.05.08
[백준1991&파이썬] 파이썬에서 이진트리의 전위,중위,후위 간단히 수행해보자.  (0) 2023.05.06
    '•알고리즘(Algorithm )/문제풀이' 카테고리의 다른 글
    • [백준13549&파이썬] BFS에서 큐에 넣을때 때때로 순서도 중요하다.
    • [백준2638&파이썬] BFS에 구현과 시뮬레이션이 섞인 문제
    • [백준9465&파이썬] DP를 풀때는 N이 1일때부터 하나씩 늘려가며 경우의 수를 따져보자.
    • [백준1149&파이썬] DP를 사용할때 확정되는 값에 대한 명확한 근거를 찾자
    김호쭈
    김호쭈
    공부하고 정리하고 기록하기

    티스토리툴바