26년1학기/알고리즘

알고리즘)dp,dc퀴즈준비

kimchangmin02 2026. 5. 7. 20:59

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

(전체를 한방에 보는게 아니라, 그단계에서 ..계속 밑으로 내려가니깐 

만약에 모두 고르시오엿고 p[1][15]도 있엇으면 어떻게 알지

 

 

 

 

 

 

코드상에서 weight int 타입으로 선언되어 있습니다. 자바에서 int는 기본 자료형이므로 객체가 아니며, 따라서 .compareTo()와 같은 메서드를 가질 수 없습니다. compareTo Integer와 같은 래퍼 클래스나 Comparable 인터페이스를 구현한 객체에서만 사용할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

플로이드 

 

 

 

 

피보나치

fib(n - 1) + fib(n - 2)  ...재귀에서는 매개변수 n이지만

f[i] = f[i - 1] + f[i - 2]  ....반복문에서 i임 

 

 

 

 

 

 

 

평균이니깐, 시그마 한뒤에 n으로 나눠야지 

 

 

 

(경곗값 헷갈릴때는 예시 넣어보면) 

 

 

 

 

 

 

 

 

 

 

 

 

플로이드, 테이블 하나에 적어야지 안헷갈리겟다

나중에 비교는 따로 하더라도 

 

 

 

 

실제 부분 배열(array)**이나 그 구간을 알고 싶다면, **maxIndex (끝점)**를 반드시 저장해야 합니다.

그리고 질문하신 대로 A가 아니라 B를 비교하는 것이 맞습니다. B[i]가 "i에서 끝나는 부분 배열의 최대 합

 

 

 

 

 


 

 

1. "a, b가 의미하는게 뭐지?"

  • A (입력 행렬): 각 칸을 통과할 때 얻는 '점수' 혹은 '길이'입니다. 문제에서 주어진 지도라고 보시면 됩니다.
  • b (DP 테이블): b[i][j]는 시작점(0,0)에서 현재 칸(i,j)까지 올 수 있는 모든 경로 중 가장 긴(최대 합) 경로의 길이를 저장한 점수판입니다.

 

 

 

b[i][j] = A[i][j] + Math.max(b[i - 1][j], b[i][j - 1]);

<초기화부분이던가, 합 구하는 부분이던가 

더하는 부분에서 i,j원래 인덱스 a에서 가져오네 

 

 

 

 

 

Math.min 사용: 문제에서 **"가장 긴 경로"**를 구하라고 했으므로 Math.max를 써야 합니다.