해결된 질문
작성
·
50
0
안녕하세요.
혼자서 고전하다 결국 강의를 보며 클론 코딩을 하는 느낌으로 이번 문제를 풀게 되었습니다.
그래서 제가 이해한 것을 바탕으로 코드 스타일만 제 스타일로 바꿨는데, 예제 4를 통과하지 못합니다. 어디선가 제가 틀렸다는 것인데 어디가 틀렸는지 도저히 모르겠네요...
여기 제 코드입니다.
http://boj.kr/40496fc4ce9d4e8fa8b9243394571b92
그리고 질문이 하나 더 있습니다.
이해가 잘 안되어 교본에서 큰돌님 코드를 보고 이해를 하려고 시도를 했는데, 이해가 되지 않는 부분이 하나 있습니다.
일단 여기 큰돌님 코드입니다.
http://boj.kr/60dbddfd09b34a019c1115999cf9eff1
제 생각에 오락실을 0개, 1개, 2개, 3개...를 들릴 때 dp의 값을 공유할 수 없기에, go의 cnt매개변수가 바뀔 때 마다 dp가 초기화 되어야 한다고 생각합니다.
그러나 큰돌님 코드는 dp의 초기화가 한번만에 되는데도 불구하고 어떻게 코드가 잘 돌아가는것 같습니다.
질문이 좀 이상하긴 한데, 이게 어떻게 가능한가요?
감사합니다.
답변 2
0
안녕하세요 비스킷님 ㅎㅎ
제 생각에 오락실을 0개, 1개, 2개, 3개...를 들릴 때 dp의 값을 공유할 수 없기에
-> 음.. 그렇지 않습니다. 재활용가능합니다.
이 DP의 의미는 다음과 같습니다.
dp[y][x][cnt][prev]
는 현재 위치 (y, x)
에서, 남은 아이템 개수가 cnt
이고, 이전 아이템 값이 prev
일 때 가능한 경로의 개수입니다.
첫 번째 반복(i = 0
):
go(1, 1, 0, 0)
을 호출하면서 DP 배열을 채웁니다.
이 상태에서 필요한 모든 값이 dp
에 저장됩니다.
두 번째 반복(i = 1
):
go(1, 1, 1, 0)
을 호출할 때, cnt = 0
상태에서 계산된 값들이 이미 저장되어 있으므로 이를 재활용합니다.
cnt = 1
을 계산할 때, cnt = 0
의 값이 필요하고 이부분은 이전반복에서 계산되어있습니다.
비스킷님 틀린부분
각지점마다 경우의 수가 2개가 있는데 해당부분이 제대로 처리가 안되는 것 + cur_data 부분 다시 확인부탁드립니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. 비스킷님.
7-K 문제와 관련된 질문을 주셨군요. 이번 문제를 해결하는 데 어려움을 겪고 계신데요, 관련된 유사한 문제와 답변이 기존에 올라온 적이 있습니다. 이 답변들을 통해 문제를 해결하는 데 도움이 되시길 바랍니다.
dp
배열의 초기화 문제로 인해 발생하는 오류에 대한 해결 방법이 설명되어 있습니다.### 핵심 설명:
- 초기화 문제: dp
배열을 충분히 초기화하지 않으면, 서로 다른 cnt
값을 사용하는 반복된 호출에서 이전 계산 결과가 영향을 미칠 수 있습니다. .init
에서 memset
함수로 배열을 초기화하여 이 문제를 해결하세요.
- 다른 접근의 영향: cnt
에 따라 dp
값을 전혀 다른 문제로 간주하여 처리해야 합니다. 일반적으로 각 상태에 대해 독립된 계산이 필요합니다.
### 강조된 내용:
- DP 배열의 초기값은 이미 계산한 것이 아님을 나타내기 위해 -1
로 설정됩니다. 이는 0
이 유효한 값일 때 특히 중요합니다.
따라서 문제를 해결하기 위해서는 각 cnt
값에 따른 DP 배열을 확실히 초기화하고, 이전 문제의 결과가 현재 문제에 영향을 주지 않도록 해야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.