Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/프로그래머스

    [프로그래머스] 정수 삼각형

    2021. 3. 3.

    by. Hyeon-Uk

    반응형

    programmers.co.kr/learn/courses/30/lessons/43105

     

    코딩테스트 연습 - 정수 삼각형

    [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30

    programmers.co.kr


    풀이)

    일반적인 dp문제이다. 삼각형을 2차원 배열로 설정하기 까다로우니 좌측으로 몰았다

    v

    vv

    vvv

    vvvv

    vvvvv

     

    이런식으로 좌측으로 몰아서 인덱싱을 하니 간편했다.

     

    dp[i][j]= i번째 높이(위에서 부터 0,1,2,....)에서 j번째 위치까지 오는데 걸리는 최대 합이다

    따라서 dp[i][j]는 바로 위의 dp[i-1][j]과 dp[i-1][j-1]두개중 큰것과 자기 자신의 값을 더해주면 되는데

    각 줄의 처음은 dp[i-1][j]만 고려해주면되고, 마지막은 dp[i-1][j-1] 만 고려해주면 되는 문제이다.

     

    수행시간)

    모든 원소를 다 돌아다니므로, 1+2+3+4+5+6+...+n 이 된다. (n=높이)

    이것은 h*(h+1)/2 가 되므로, 수행시간은 O(n*n) 이 된다.

     

    코드)

     

    #include <string>
    #include <vector>
    #include<algorithm>
    using namespace std;
    
    int dp[500][500]={0};
    
    int solution(vector<vector<int>> triangle) {
        int answer = 0;
        
        //맨 꼭대기 dp초기화
        dp[0][0]=triangle[0][0];
        
        for(int i=1;i<triangle.size();i++){
            for(int j=0;j<triangle[i].size();j++){
                //각 줄의 처음 원소
                if(j==0){
                    dp[i][j]=triangle[i][j]+dp[i-1][j];
                }
                //각 줄의 마지막 원소
                else if(j==triangle[i].size()-1){
                    dp[i][j]=triangle[i][j]+dp[i-1][j-1];
                }
                else{
                    dp[i][j]=triangle[i][j]+max(dp[i-1][j],dp[i-1][j-1]);
                }
            }
        }
        
        //마지막 줄을 돌아다니며 최대값 찾음
        int ind=triangle.size()-1;
        answer=*max_element(dp[ind],dp[ind]+ind+1);
        return answer;
    }

     

    실행결과)

     

     

    반응형
    저작자표시 (새창열림)

    '문제풀이 > 프로그래머스' 카테고리의 다른 글

    [프로그래머스] 2 x n 타일링  (0) 2021.03.21
    [프로그래머스] 등굣길  (0) 2021.03.06
    [프로그래머스] 같은 숫자는 싫어  (0) 2020.11.24
    [프로그래머스] 3진법 뒤집기  (0) 2020.11.24
    [프로그래머스] 가운데 글자 가져오기  (0) 2020.11.24

    댓글

    관련글

    • [프로그래머스] 2 x n 타일링 2021.03.21
    • [프로그래머스] 등굣길 2021.03.06
    • [프로그래머스] 같은 숫자는 싫어 2020.11.24
    • [프로그래머스] 3진법 뒤집기 2020.11.24
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바