출처: 프로그래머스 코딩테스트 연습 ,https://school.programmers.co.kr/learn/courses/30/lessons/43105
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제풀이]
정수삼각형에 대한 데이터가 2차원 배열으로 주어진다.
우리가 기억해야 할 값들은
정수삼각형을 타고 아래로 내려가면서
이 칸까지 오면서 숫자를 더했을때에 가능한 최댓값, 단 하나 뿐이다 .
즉 2번째 줄에선 10과 15만 기억하면 되는것이고,
3번째 줄의 8에서는 10에 8을 더한 18만,
3번째줄의 1에서는 10과 15중에 큰 15를 1에 더한 16만,
3번째 줄의 0에서는 15를 더한 15만 기억하면 된다.
즉 n번째 줄에서는, 맨 처음과 끝 값은 바로 위의 값을 더한 값을, 그리고 중간에 있는 1번째값부터 n-1 번째 값 까지는
위의 두가지 값중에 큰 것만 더해서 기억시키면 된다.
그러면 맨 밑에 n 번째 줄에 가장 큰 값들을 가진 경우의수 n개가 나오게 되는데,
이중에서 가장 큰 것을 탐색하면 된다.
[코드]
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> triangle) {
int answer = 0;
int N = triangle.size();
for(int i = 1 ; i < N ; i++){
for (int j = 0 ; j < triangle[i].size() ;j++){
if (j == 0){
triangle[i][j] += triangle[i-1][j];
}
else if (j == triangle[i].size() - 1){
triangle[i][j] += triangle[i-1][j-1];
}
else{
triangle[i][j] += max(triangle[i-1][j],triangle[i-1][j-1]);
}
}
}
for (int i = 0 ; i < N ; i++){
answer = max(answer,triangle[N-1][i]);
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[C++] 프로그래머스 : 하노이의 탑 (0) | 2024.02.23 |
---|---|
[C++] 프로그래머스 : 전력망을 둘로 나누기 (0) | 2024.02.22 |
[C++] 프로그래머스 : 시저 암호 (0) | 2024.02.22 |
[C++] 프로그래머스 : 달리기 경주 (0) | 2024.02.15 |
[Python] 프로그래머스 : 주차 요금 계산 (0) | 2024.02.14 |