Po_tta_tt0
콩심콩 팥심팥 🌱
Po_tta_tt0
전체 방문자
오늘
어제
  • 분류 전체보기 (266)
    • 🐛 회고 (14)
    • 💭 생각 (2)
    • 🤸‍♀️ 내 프로젝트 (16)
      • FISH-NEWS (8)
      • MBTI 과몰입 테스트 (2)
      • twitter clonecoding with TS (4)
      • pilzagenda (2)
    • 👨‍👩‍👧‍👦 팀 프로젝트 (2)
      • 피우다 프로젝트 (0)
      • SEMO(세상의 모든 모임) (1)
      • 마음을 전하는 텃밭 (1)
      • Stackticon (0)
    • 👨‍💻 CS지식 (11)
    • ✍ 공부 (94)
      • JavaScript (21)
      • TypeScript (39)
      • Html (0)
      • CSS (2)
      • React (18)
      • NextJS (7)
      • Vue (1)
      • Python (1)
      • Django (0)
      • 개발환경 & 그 외 (2)
    • 🏄‍♀️ 코딩테스트 (99)
      • 🐍 Python (99)
    • 🐙 Git & GitHub (3)
    • 📑 오류기록 (8)
    • 📚 우리를 위한 기록 (9)
    • 수업 (3)
    • 강의 등 (2)
    • 👩‍🎓 SSAFY (0)
    • 👋 우테코 (0)

블로그 메뉴

  • 홈
  • 태그

공지사항

인기 글

태그

  • 파이썬
  • 구현
  • dfs
  • 문자열
  • 파이썬 감시 피하기
  • Next.js
  • BFS + DP
  • 시뮬레이션
  • React
  • bfs
  • 백준 숨바꼭질
  • 백준
  • 파이썬 다익스트라
  • 자바스크립트
  • js
  • DP
  • 백준 파이썬
  • 플로이드 워셜
  • 이분탐색
  • react-router-dom

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Po_tta_tt0
🏄‍♀️ 코딩테스트/🐍 Python

[ 백준 1932 ] ( python ) 정수 삼각형

🏄‍♀️ 코딩테스트/🐍 Python

[ 백준 1932 ] ( python ) 정수 삼각형

2022. 6. 9. 09:51
반응형

 

📚 정수 삼각형

 

문제

        7
      3   8
    8   1   0
  2   7   4   4
4   5   2   6   5

위 그림은 크기가 5인 정수 삼각형의 한 모습이다.

맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.

삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.

입력

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

출력

첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.

예제 입력 1 복사

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

예제 출력 1 복사

30

 

 

 

✍ 접근

  • 나..  DP 못하네
  • 삼각형을 그리면서 방법을 찾는다

 

 

정답 코드 1

import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
    arr.append(list(map(int,input().split())))
res=[arr[0][0]]
for i in range(1,N):
    for j in range(len(arr[i])):
        if j == 0:
            arr[i][0] = arr[i-1][0]+arr[i][0]
        elif j == len(arr[i])-1:
            arr[i][-1] = arr[i-1][-1]+arr[i][-1]
        else:
            arr[i][j] = max(arr[i-1][j-1],arr[i-1][j])+arr[i][j]
print(max(arr[N-1]))

 

 

정답 코드 2

import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
    arr.append(list(map(int,input().split())))
res=[arr[0][0]]
for i in range(1,N):
    arr[i][0] = arr[i-1][0]+arr[i][0]
    arr[i][-1] = arr[i-1][-1]+arr[i][-1]
    for j in range(1,len(arr[i])-1):
        arr[i][j] = max(arr[i-1][j-1],arr[i-1][j])+arr[i][j]
print(max(arr[N-1]))

 

  • 두 정답 코드의 차이는 단지 삼각형의 0번째 요소와 마지막 요소를 어디서 확인하냐의 차이. 두 번재 코드가 더 효율이 좋다 ( 한번만 확인하고 넘어가니까 + for문을 더 적게 도니까 192 -> 164)
  • arr 에 삼각형을 넣어준다. arr에 있는 이중 배열은 1, 2, 3, 4 로 하나씩 커진다
  • for문을 돌면서 arr[i][0]과 arr[i][1] 처음과 마지막은 바로 위 처음과 마지막 + 자신의 처음과 마지막 값을 해주고
    • 이중 for문을 통해 나머지 1부터 len(arr[i])-1 까지 돌며 arr[i][j] = max(왼쪽에서 왔을 때, 오른쪽에서 왔을 때)+ 자신의 값 

을 돌아주면 된다

 

 

⭐ 배움

  • 일단 혼자 끝까지 풀어보는 것이 중요한 것 같다. 하지만.. 시간이 너무 소요될 시 정답을 확인하고 다시 풀어보는 것도 좋은 배움이 된다
  • 유연한 사고를 가지자!

 

 

 

 

 

반응형

'🏄‍♀️ 코딩테스트 > 🐍 Python' 카테고리의 다른 글

[ 백준 2156 ] ( python ) 포도주 시식  (0) 2022.06.10
[ 백준 1912 ] ( python ) 연속합  (0) 2022.06.10
[ 이코테 강의 ] 기타 그래프 이론  (0) 2022.06.03
[ 백준 9095 ] ( python ) 1, 2, 3 더하기  (0) 2022.06.03
[ 백준 1003 ] ( python ) 피보나치 함수  (0) 2022.06.02
  • 정답 코드 1
  • 정답 코드 2
'🏄‍♀️ 코딩테스트/🐍 Python' 카테고리의 다른 글
  • [ 백준 2156 ] ( python ) 포도주 시식
  • [ 백준 1912 ] ( python ) 연속합
  • [ 이코테 강의 ] 기타 그래프 이론
  • [ 백준 9095 ] ( python ) 1, 2, 3 더하기
Po_tta_tt0
Po_tta_tt0
감자의 코딩하는 블로그 콩심은데 콩나고 팥심은데 팥난다

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.