ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 정수 삼각형- python
    코딩테스트 2024. 12. 15. 20:42

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

     

    프로그래머스

    SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

    과정 : 

    문제에서 찾고자 하는 것 : 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우

    1. triangle 와 동일한 구조의 리스트인 sum_temp 리스트를 모두 값을 0으로 초기화하여 만든다.

    2. sum_temp[0][0] 값을 삼각형의 꼭대기 값 (triangle[0][0])으로 변경한다.

    3. i > 1 일때 sum_temp[i][j] 값을  sum_temp[i-1][j-1 or j] 값 + triangle[i][j] 값으로 변경한다.

    이때, sum_temp[i-1][j-1 or j]sum_temp[i-1][j-1] 와  sum_temp[i-1][j] 중에 큰값을 선택하여 결정한다.

    예를 들면 sum_temp[2][1] = max(sum_temp[1][0], sum_temp[1][1] ) + triangle[2][1] 이 되고 sum_temp[2][1] = max(10, 15) + 1 으로 sum_temp[2][1]은 16이 된다.

    4. j = 0 일때 sum_temp[i-1][j-1]의 값은 없으므로 ( sum_temp 왼쪽위의 값이 없음 )

    sum_temp[i][j] = sum_temp[i-1][j] + triangle[i][j] 이 되고 (ex. sum_temp[2][0] = 10 + 8)

    5. j = len(sum_temp[i]-1) 일때 즉 j가 맨 끝 줄일때 sum_temp[i-1][j] 의 값은 없으므로 ( sum_temp 오른쪽위의 값이 없음 )

    sum_temp[i][j] = sum_temp[i-1][j-1] + triangle[i][j] 이 된다 (ex. sum_temp[2][2] = 15 + 0)

    6. sum_temp의 맨 마지막 줄에 " 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자들의 합들" 이 계산되고 이중 max값이 가장 큰 합이다. 

    def solution(triangle):
        answer = 0
        sum_temp = []
        
        #sum_temp : 주어진 triangle 리스트와 동일한 구조의 리스트, 값은 0으로 초기화
        for i in range(len(triangle)):
            sum_temp.append([])
            for j in range(len(triangle[i])):
                sum_temp[i].append(0)
        
        for i in range(len(triangle)):
            for j in range(len(triangle[i])):
                if i == 0:
                    sum_temp[i][j] = triangle[i][j]
                elif j == 0: #j 가 0이면 sum_temp 왼쪽위의 sum값이 없기때문에 오른쪽위의 값과 현재 원소 값을 더해준다
                    sum_temp[i][j] = sum_temp[i-1][j] + triangle[i][j]
                elif j == len(triangle[i])-1:  #j가 라인의 가장 끝값이면 sum_temp 오른쪽위의 sum값이 없기때문에 왼쪽위의 값과 현재 원소 값을 더해준다
                    sum_temp[i][j] = sum_temp[i-1][j-1] + triangle[i][j]
                else: #오른쪽 위의 sum 값과 왼쪽위의 sum값중 큰값을 현재 원소 값에 더해준다
                    sum_temp[i][j] = max(sum_temp[i-1][j-1],sum_temp[i-1][j]) + triangle[i][j]
                              
        answer = max(sum_temp[len(triangle)-1])
        return answer

     

     

     

    '코딩테스트' 카테고리의 다른 글

    [프로그래머스] 더 맵게 - python  (0) 2024.12.31
    [프로그래머스] N으로 표현  (0) 2024.12.31
    [BAEKJOON] 이친수 - python  (1) 2024.06.16
    [BAEKJOON] 오르막 수 - python  (0) 2024.06.16
    [BAEKJOON] 쉬운 계단 수 - python  (1) 2024.06.15
Designed by Tistory.