해결된 질문
작성
·
33
0
안녕하세요 큰돌님!
2Q 를 풀다가 반례를 못찾겠어서 질문드립니다!
https://www.acmicpc.net/source/90805248
제가 제출한 코드인데, 큰돌님의 풀이보다 복잡하고 비효율적인 것은 알지만 이 풀이가 왜 틀렸는지 알고싶어서 여쭤봅니다.
답변 2
0
안녕하세요 영호님 ㅎㅎ
몇가지 의아한 부분들이 있는데요. 그부분들 때문에 틀리지 않았나 싶습니다.
1.visited는 여기에 걸어야 하는게 아닐까요?
while(!check_last()){ // !check_last() 를 통해 0으로만 이루어진 인풋인 경우 0 0 출력
cnt1++; // cnt1 -> 치즈가 녹는데 걸리는 시간
memset(visited, 0, sizeof(visited));
flag 변수는 필요하지 않은 것 같습니다.
그리고 cnt2 부분은 이렇게 되어야 하는게 아닐까요?
if (check_last()) {
int meltedCheeseCount = 0;
for (int i = 0; i < N; i++){
for (int j = 0; j < M; j++){
if (Map[i][j] == -1)
meltedCheeseCount++;
}
}
cnt2 = meltedCheeseCount;
break;
}
그리고 끝점에 대해 체크하는 로직이 있는데 이 문제의 경우 아래 <그림 1>과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(<그림 1>에서 네모 칸에 X친 부분)에는 치즈가 놓여 있지 않으며 치즈에는 하나 이상의 구멍이 있을 수 있다. 이렇게 되어있기 때문에 끝점은 체크하지 않아도 됩니다.
이런 부분들을 한번 고쳐보시겠어요?
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. 제영호님께서 주신 질문에 대한 답변을 드리겠습니다.
제영호님께서 언급하신 문제에서 반례를 찾기 어렵다고 하셨는데, 이런 경우 보통 예외적인 입력이나 극한 조건에서 문제가 발생하는 경우가 많습니다. 테스트 케이스를 더 다양한 방법으로 생성하고, 입력의 각 부분이 코드의 의도대로 처리되고 있는지를 세부적으로 검토하는 것이 좋습니다.
아래 링크에서 유사한 문제와 그에 대한 설명을 찾아보실 수 있습니다:
반례를 찾기 위해 다음과 같은 방법을 추가적으로 시도해 보시는 것도 좋습니다:
이러한 방법으로 문제의 특정 부분에서 오류가 발생할 수 있는지 검토해 보시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.