• 티스토리 홈
  • 프로필사진
    Cat_Code
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Cat_Code
  • 프로필사진
    Cat_Code
    • 분류 전체보기 (116)
      • [네이버 부스트캠프] (46)
        • ⭐주간 학습 정리 (43)
        • 🎶추가 학습 정리 (3)
      • [연습의 흔적들] (27)
        • 백준⚾ (26)
        • 캐글 & 데이콘 🤝 (1)
      • [ML] (23)
        • 머신러닝 💕 (5)
        • 딥러닝 🔫 (10)
        • 데이터 분석 🖤 (1)
        • 수학 ☑️ (4)
        • LLM🦜 (3)
      • [CS] (16)
        • 파이썬 🖤 (12)
        • 해체 분석기📝 (3)
        • Service Product (1)
        • MultiMedia (0)
      • [개발일지] (2)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [백준] 1932번 정수 삼각형 파이썬(Python) 풀이
        2022년 12월 15일
        • Cat_Code
        • 작성자
        • 2022.12.15.:44
         

        1932번: 정수 삼각형

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

        www.acmicpc.net


        [문제]

         


        [코드]

        import sys
        input = sys.stdin.readline
        
        n = int(input())
        tree = []
        for _ in range(n):
            tree.append([int(f) for f in input().split()])
        
        
        for i in range(1, n):
            for j in range(0 , i+1):
                if j == 0:
                    tree[i][0] += tree[i-1][0]
                elif j == i:
                    tree[i][j] += tree[i-1][j-1]
                else:
                    tree[i][j] += max(tree[i-1][j-1], tree[i-1][j])
        
        
        print(max(tree[n-1]))

        [해석]

         

        실버 1치고는 비교적 간단한 문제

         

        처음에는 BFS, DFS 문제로 접근해서 풀어볼까 생각해보았지만

        생각해보니까 그런 문제가 아니었다

        dp를 이용한 greedy 문제에 가까운 문제였다

         

        import sys
        input = sys.stdin.readline
        
        n = int(input())
        tree = []
        for _ in range(n):
            tree.append([int(f) for f in input().split()])

        여기까지는 간단한 구현

        tree 크기를 n변수로 받고 

        for 문을 통해서 각 층에 해당하는 값을 list의 형태로 tree에 추가해준다

         

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

        사실상 이 이중 for문에 문제 해결의 핵심 코드

        먼저 첫번째 for 문은 1에서 시작해서 n까지 실행

             (why? not start 0 : 예제1의 예시로 설명하자면 5층인 tree는 -> 0층~4층까지 간다 (5층), 우리가 구하려고 하는 것은 최       댓값이기 때문에 1층에서 - 0층을 바라보고 2층에서 -1층을 바라보면서 최댓값을 구해야한다

             따라서 1~n까지 for문을 실행 = 0층은 스킵)

         

        그리고 그 층에 해당하는 값들을 2번째 for문을 돌면서 이전 층의 값과 더해줌 

            (why? i+1까지인가 -> 각층의 값 1층[0층]의 값은 1개 , 2층[1층]의 값은 2개, 즉, n층[n-1층]의 값의 갯수는 n개 이므로 n      층의 전체 값을 돌기 위해서는 i-1까지 for문을 돌아야 한다)

         

         여기서 경우의 수는 3가지로 나옴

        (1) 맨 왼쪽에 위치한 값을 경우

        (2) 맨 오른쪽에 위치한 값일 경우

        (3) 그외에 위치한 경우

         

         

        (1), (2)번의 경우 무조건 하나의 값으로 갈 수 밖에 없다 - 특정 값을 향해 갈 수 밖에 없다는 소리

         

        예제를 보았을 때 3층은 8, 1, 8 으로 구성되어 있다 

        여기서 (1)은 맨 왼쪽 8 ->이는 위의 값 중 3으로 밖에 갈 수 밖에 없다

        여기서 (2)는 맨 오른쪽 8 8 ->이는 위의 값 중 8로 갈 수 밖에 없다

        그리고 나머지 경우 (3) -> 중앙 1 -> 이 친구는 3 or 8로 갈 수 있다

         

        따라서 (1), (2)의 값은 특정 위치의 값을 더하게 만들어 주고 

        (3) -> 경우의 수가 2가지 이기때문에 우리가 구하려고 하는 값 , 최댓값을 위해서 더 했을 때 최대가 되는 값을 더해준다

         

        그렇게 for문을 돌면 완성

         

        tree의 [n-1] 리스트의 최댓값을 출력해주면 우리가 구하려고 했던 값이 나온다

         

        '[연습의 흔적들] > 백준⚾' 카테고리의 다른 글

        [백준] 1038번 감소하는 수 파이썬(Python) 풀이  (0) 2022.12.22
        [백준] 10844번 쉬운 계단 수 파이썬(Python) 풀이  (0) 2022.12.19
        [백준] 1946번 신입 사원 파이썬(Python) 풀이  (0) 2022.12.13
        [백준] 2667번 단지 번호 붙이기 파이썬(Python) 풀이  (0) 2022.12.12
        [백준] 1654번 랜선 자르기 파이썬 풀이  (0) 2022.12.09
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바