mimmyum   6년 전

어떤 부분에서 문제가 있을까요...

djm03178   6년 전

아무 데이터나 막 넣어보는 건 질문자분도 충분히 하실 수 있습니다.

어디가 잘못됐는지에 대한 조언을 구하려면 코드의 동작 원리를 설명해야 합니다.

mimmyum   6년 전

@djm03178

아 네 푸는방식은 DP와 같이 풀었는데 한방향으로만 움직일 수 있으니까

원래 값들을 저장하는 map 배열과,

특정 점 (x, y)까지 가는 최대합을 저장하는 maxMap을 만들고, 

두개의 임시 배열 tempLeft, tempRight를 만든 다음 

tempLeft는 (x,0)부터 오른쪽으로 가면서 합이 가장 큰 값을 저장하고, tempRight는 (x, M-1)부터 왼쪽으로 가면서 합이 가장 큰 값을 저장하였습니다.

이 다음, tempLeft와 tempRight 중 큰 값을 maxMap 저장하고, (x+1) 라인에 (x)의 maxMap을 모두 저장합니다.

위 과정을 마지막 라인에 올때까지 반복하고 최종적으로 maxMap(N-1,M-1)을 출력하도록 하였습니다..

즉, 

(x, y) ------------ㄱ

ㄴ-----------------(x+1,j)

일 때, maxMap(x+1, j)는 (x+1, j)까지 오는 최대의 합을 저장하였습니다.

위 과정에서 뭔가 빠진 로직이 있을까요?

djm03178   6년 전

3 3
1 1 -9
-9 1 -9
-9 1 1

이 케이스에서 5가 나와야 하는데, -5가 나옵니다.

문제를 찾자면, 반드시 좌우 맨 끝까지 갈 필요는 없는데 temp에 무조건 맨 끝부터 더한 값으로 최댓값을 찾기 때문에 최적의 답이 나오지 못합니다.

mimmyum   6년 전

@djm03178

답변 주셔서 감사합니다.

말씀대로 로직을 다시 살펴보니 tempLeft, tempRight 값이 제대로 바뀌지 않고 있더군요.

덕분에 풀었습니다. 감사합니다!!

댓글을 작성하려면 로그인해야 합니다.