wjd5126   1년 전

//(벽,파랑)<->(벽,파랑)무한 반복의 케이스를 제외한 흰색과 빨간색 발판의 경우
vector<int>imarr;
int count = 0;

//at에 층을 저장-> 현재 말의 뒤(위쪽)를 임시 vector에 저장
for (int i = at; i < map[y][x].size(); i++) {
imarr.push_back(map[y][x][i]);
count++;
}

//문제의 코드 ( 수행 내용 -> 임시 vector에 저장 횟수만큼 만큼 pop)

// (솔루션 1)실행시 문제가 되는 코드 ( 테스트 결과 pop이 덜 이루어져서 map에 말이 점점 늘어남)
for (int i = at; i < map[y][x].size(); i++) {
map[y][x].pop_back();
}

/* (솔루션 2)문제없이 잘 동작하는 코드
for (int i = 0; i < count; i++) {
map[y][x].pop_back();
}
*/

(솔루션 1번)과 (솔루션2번)코드의 횟수반복의 차이에 대해서 이해가 안갑니다.

여기서 at은 현재 움직일 말의 층이고 앞쪽에 있을수록 밑에 있습니다.

솔루션1번 위의 코드와 솔루션 1번의 반복 조건이 같고, 그렇다면 솔루션1번과 솔루션2번의 실행횟수의 차이가 없어야 하는 것이라고 판단했습니다.

print를 열심히 도배해서 문제를 특정하는데는 성공했는데, 저게 왜 틀린건지 이해가 안가서 질문드립니다.

해당코드는 play함수 코드의 일부이고 아래 코드의 87~105번줄 코드에 해당합니다.

문제가 되는 tc입니다. (문제 예시 tc 1번)

4 4
0 0 2 0
0 0 1 0
0 0 1 2
0 2 0 0
2 1 1
3 2 3
2 2 1
4 1 2


위 코드의 답 : 7

원래 답 : -1

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