[Week 4] TRIPATHCNT self review - Scaachan
Closed this issue · 0 comments
Queue-ri commented
TRIPATHCNT self review
- 파일명: TRIPATHCNT/Scaachan.cpp
- 수행시간: 16ms
1. 문제 해결 과정
TRIANGLEPATH 문제는 단순히 크기 비교만 하면 되니 간단했는데,
이 문제는 가장 큰 sum
도 알아야 하고 해당 sum
이 몇 개 있는지 카운팅도 해야 하기 때문에 생각이 더 필요했습니다.
함수의 반환은 기본적으로 하나만 가능한데, 이를 struct/class
나 std::pair
로 넘기자니 조잡하고, 문제의 의도가 아닌 것 같았습니다.
따라서 카운팅은 캐싱으로 해결하기로 하고, 함수는 최대 sum
만 return 해서 TRIANGLEPATH 식으로 수행하기로 했습니다.
2. 아이디어
dp로 풀었습니다.
3. 코드 설명
📌Line 21~24
if (a == b) {
cache_cnt = memo[y + 1][x][1] + memo[y + 1][x + 1][1];
return cache_sum = tri[y][x] + a;
}
삼각형을 트리로 생각할 때, 왼쪽 자식과 오른쪽 자식 노드의 sum
이 같다면 cnt
(카운팅 변수)를 합쳐줍니다.
현재 노드의 sum
은 현재 노드의 값 + 왼쪽 or 오른쪽 자식노드의 sum
입니다.
📌Line 25~28
else if (a < b) {
cache_cnt = memo[y + 1][x + 1][1];
return cache_sum = tri[y][x] + b;
}
오른쪽 자식 노드의 sum
이 더 크다면, 현재 노드의 cnt
는 오른쪽 자식 노드의 cnt
나 다름없고
현재 노드의 sum
은 현재 노드의 값 + 오른쪽 자식노드의 sum
이 됩니다.
📌Line 29~32
else {
cache_cnt = memo[y + 1][x][1];
return cache_sum = tri[y][x] + a;
}
그 외의 경우라면, 왼쪽 자식노드의 cnt
를 대입하고
현재 노드의 sum
에는 현재 노드의 값 + 왼쪽 자식노드의 sum
을 대입합니다.
📌Line 35~36
cache_cnt = 1;
return cache_sum = tri[y][x];
35~36줄은 base case를 위한 로직입니다.
현재 노드가 leaf 일 때 더이상 내려갈 노드가 없으므로, cnt
를 기본 1로 두고 자기 자신의 값을 sum
으로 캐싱합니다.