백준 #1932

2024. 3. 3. 16:24·알고리즘

난이도 : 실버1
소요시간 :  1h 17m
사용한 풀이법 : DP


풀이 과정

  • 풀이과정(백트래킹)
    1. 각 요소[i][j]는 대해서 [i+1][j],[i+1][j+1]만 더할 수 있음
    2. 해당 위치에서 이동가능한 경로를 인자로 해서 함수 재귀 진행
    3. 인자가 n과 같아지면 결과갑 리스트에 삽입
    4. 모든 경우의 수 탐색 후 리스트의 max를 출력하면 정답!!
    5. 이긴 한데 메모리 초과 뜸
  • 풀이과정(DP)
    1. 위에꺼에서 아래꺼를 더하는 방식이 아닌 아래꺼에서 위에 값을 참조해오는 것으로 변경
      =>메모리 손실 방지
    2. 참조 방식은 총 3가지
      1. 행의 첫번째 인자일 경우, 바로 위 행의 첫번째 인자값에 더하면 됨 ([i-1][0])
      2. 행의 마지막 인자일 경우, 바로 위 행의 마지막 인자값에 더하면 됨 ([i-1][-1])
      3. 행의 중간일 경우, 바로 위의 인자값과 왼쪽 대각선 위의 인자값 중 큰 값과 더하면 됨 (max([i-1][j], [i-1][j-1]))
    3. 쭉 참조하다가 리스트의 마지막 행에 도달하면 그 행의 최댓값이 곧 정답!

작성 코드

### 백트래킹으로 푼 방법

n = int(input())
tri = [[-1]*n for _ in range(n)]    #삼각형을 이루는 정수값 입력용 리스트
max_sum = []

cnt = 0
for i in range(n):
    row = input().split()
    for j in range(i+1):
        tri[i][j]=int(row[j])
    
def BackT(row,col,sum):
    if row==n:
        max_sum.append(sum)
        return 0
    
    sum += tri[row][col]
    BackT(row + 1, col, sum)
    BackT(row + 1, col + 1, sum)
    
BackT(0,0,0)
print(max(max_sum))
### DP로 푼 방법

n = int(input())
tri = []  #삼각형을 이루는 정수값 입력용 리스트

for _ in range(n):
    tri.append(list(map(int,input().split())))
    

for i in range(1,n):
    for j in range(len(tri[i])):
        if j==0:
            tri[i][j] += tri[i-1][0]
            
        elif j == len(tri[i])-1:
            tri[i][j] += tri[i-1][-1]
            
        else:
            tri[i][j] += max(tri[i-1][j],tri[i-1][j-1])
            
print(max(tri[n-1]))

피드백

'뭐야 백트래킹이네' 하고 풀었다가 된통 당한 멍청이 한명. 좀만 더 생각했으면 더 간결한 코드로 쉽게쉽게 풀었을텐데...
아 그리고 공백으로 구분된 문자열의 입력을 정수형 리스트에 넣는게 생각보다 헷갈린다. 
파이썬은 뭔가 굉장히 쉬운 언어이면서도 헷갈리는 언어다..
저작자표시 (새창열림)

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

백준 #1463 <1로 만들기>  (0) 2024.03.08
백준 #9095: 1,2,3 더하기  (1) 2024.03.06
백준 #1260  (0) 2024.03.03
백준 #1182 부분 수열의 합  (1) 2024.02.12
백준 #10026 적록색약  (1) 2024.02.11
'알고리즘' 카테고리의 다른 글
  • 백준 #1463 <1로 만들기>
  • 백준 #9095: 1,2,3 더하기
  • 백준 #1260
  • 백준 #1182 부분 수열의 합
70_0ewd
70_0ewd
내가 보려고 적는 나의 공부 기록
  • 70_0ewd
    Seung's Learning Record
    70_0ewd
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • DE (2)
      • Dev Tool (29)
        • Flutter (5)
        • AWS (8)
        • Django (7)
        • Spring boot (9)
      • 프로그래밍 (30)
        • C++ (0)
        • JAVA (6)
        • SQL (13)
        • Python (8)
        • WEB (3)
      • 알고리즘 (26)
      • CS (5)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    stl
    group by
    django
    DP
    프로그래머스
    너비 우선 탐색
    AWS
    자바
    select
    백준
    Python
    백트래킹
    스택
    Java
    BFS
    delete
    Flutter
    큐
    DFS
    파이썬
    깊이 우선 탐색
    플러터
    Queue
    공룡책
    데브코스
    SQL
    heap
    웹 스크래핑
    C++
    JOIN
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
70_0ewd
백준 #1932
상단으로

티스토리툴바