작성
·
352
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번째 줄에 추가해서 더이상 연산이 되지 않게 했는데도 불구하고 역시나 제출후 바로
'틀렸습니다'
라고 나옵니다.와 같은 반례를 넣어도 손으로 하나하나 계산한 값과 동일하게 나와서, 알고리즘에는 문제가 없어보이는데, 어떤부분이 잘못되었는지 모르겠습니다.
이럴경우 할 수있는 반례 생각이나 디버깅 접근방법이 있나요..?