바로 전에 풀었던 문제와 굉장히 비슷한 유형이였다. 로직은 똑같이 각 Row에 최소값만을 집어 넣는것. 그런데 여기서 좀 달랐던거는 이번에는 모양이 피라미드 형태고 배열이 사용된게 아니라 컬렉션 프레임워크가 사용되었다는 점이다.
확실히 배열만 사용하다가 컬렉션 프레임워크를 사용하니깐 많이 어색한게 있다. 먼저 index에 접근하려면은 .get() 이라는거를 사용해야 하고 length만 사용가능 했던 배열에 비해서 이번에는 .size() 도 허용이 된다. 진짜 C++에 익숙한 나로서 index를 접근하기 위해서 메서드를 사용해야 한다는게 이해가 안가지만 그래도 자바에서는 이해 해야한다.
추가적으로 index를 찾아서 값을 넣으려고 했는데 처음보는 에러가 나왔는데 자바에서는 C++처럼 matrix[i][j] = value 이런 식으로 하기 위해서는 단순하게 .get() 으로 접근하는게 아니고 .set() 메서드를 꼭 사용해야 된다고 배웠다. 여러모로 조금 불편한 점도 많지만 그래도 적응 중인거같아서 다행이다.
class Solution {
public int minimumTotal(List<List<Integer>> triangle) {
if(triangle.size() == 1) return triangle.get(0).get(0);
for(int i = 1; i < triangle.size(); i++){
for(int j = 0; j < triangle.get(i).size(); j++){
int curr = triangle.get(i).get(j);
int left_min = j > 0 ? triangle.get(i-1).get(j-1) : 10001;
int right_min = j < triangle.get(i-1).size() ? triangle.get(i-1).get(j) : 10001;
//triangle.get(i).get(j) = Math.min(curr + left_min, curr + right_min);
triangle.get(i).set(j,Math.min(curr + left_min, curr + right_min));
}
}
return Collections.min(triangle.get(triangle.size()-1));
}
}