작성
·
385
0
안녕하세요 선생님,
매번 선생님 정답코드 보기전에 먼저 충분히 코딩해보고 안되면 정답보는 식으로 수업을 듣고있습니다.
이번 낚시왕 문제같은경우 상어가 움직이는 로직을 좀더 신경써서 나름 코딩을 했고, Test Case와 개시판 모든 반례들을 다 통과했는데, 제출하자마자 바로 틀렸다고 나오네요..
제가 무엇을 놓치고 있는지 알려주시면 감사합니다.
선생님이 강의해주신 논리가 비슷한거같은데 제 코드는 제대로 계산하지 못한 반례가 있을까요..?
http://boj.kr/504e729dba00420a807fdcc3a57d2fde
항상 좋은 강의 감사합니다 ㅠㅜ
답변 1
1
안녕하세요 ㅎㅎ
전체적으로 봤을 때는 괜찮은데 예제 4요.
2 2 4
1 1 1 1 1
2 2 2 2 2
1 2 1 2 3
2 1 2 1 4 이 입력에 대해서 .
cout << y << " : " << x << '\n';
if(temp[y][x]){
if(size > sang[temp[y][x]].size){
kill(temp[y][x]);
temp[y][x] = i;
}
else{
kill(i);
}
}이렇게 디버깅코드를 한다고 했을 때 이렇게 나와야 하는 것 아닌가요?
1 : 1
1 : 1
1 : 0
1 : 0형규님의 코드에 디버깅 코드를 추가하면
이렇게 출력이 되거든요?
101 : 101
1 : 1
1 : 1
1 : 0
101 : 101
101 : 101
101 : 101
1 : 0
확인 부탁드립니다.
감사합니다.
이거 제가 한 30분 이상은 봤는데.. 되게 애매하네요. 전체적인 로직은 잘 짰습니다.
(제가 생각한 반례 다 넣어봤는데 잘 나옵니다..)
근데 틀린다고 나오죠?
이러한 부분 같은 경우는.
불필요한 변수, 로직 등을 제거하면서 디버깅하셔야 해요.
제가 걸리는부분은 2가지인데 101 그부분이랑 while문 쓰지 않고 if문 한번 더 써서 한 건데...
101은 죽은 것을 표현하기 위해 범위 이상값으로 하신거 잘하신 거고 while문을 쓰지 않고 한점. 어차피 2번 이상은 발생되지 않기 때문에 그렇게 하신 거 같은데 잘하셨는데...
제 역량이 부족해서 반례가 잘 안떠오르네요 ㅠㅠ
일단 어느정도 더 해보시고 안되면 일단 넘어가주세요.
나중에 한번 더 보겠습니다.
감사합니다.
세심하게 봐주셔서 감사합니다 ㅠㅜ
저도 죽은거를 표현하기 위해 고민하다가 101같은 로직을 넣은거거든요.
저도 좀 찝찝했던건, 모든 상어id를 한번 확인하는 for문에서 죽은거를 무시한다 하더라도 어찌되었든 한번은 죽은 상어를 방문하게 되니깐 로직이 조금 더러워지는 부분입니다.
웃기게도 Test case와 넣을 만한 다른 반례들은 다 잘나와서 머리가 아프네요..
저도 kill부분 좀 뜯어보다가 안되면 말씀대로 우선 넘어가겠습니다
감사합니다!
답변 주셔서 감사합니다!!
y와 x가 101이라고 뜬 부분은 이미 낚시꾼이 잡았던가 서로 먹혔을경우 주어진 matrix밖으로 내보냈다는 의미고 이경우 dir 이 0 이 되기 때문에 for loop상 계산은 되지만 실제로 연산되지 않아 움직이거나 계산중에 영향이 없다고 생각했습니다.
저도 선생님이 알려주신대로 디버깅 코드를 넣어서 확인했고, 불필요한 연산이 들어가 예상치못한 결과가 나왔나 싶어서
를 70번째 줄에 추가해서 더이상 연산이 되지 않게 했는데도 불구하고 역시나 제출후 바로
'틀렸습니다'라고 나옵니다.와 같은 반례를 넣어도 손으로 하나하나 계산한 값과 동일하게 나와서, 알고리즘에는 문제가 없어보이는데, 어떤부분이 잘못되었는지 모르겠습니다.
이럴경우 할 수있는 반례 생각이나 디버깅 접근방법이 있나요..?