인프런 커뮤니티 질문&답변

Hyoungku Jeon님의 프로필 이미지
Hyoungku Jeon

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-T

5-T 낚시왕 질문있습니다..

작성

·

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

 

확인 부탁드립니다.

감사합니다.

Hyoungku Jeon님의 프로필 이미지
Hyoungku Jeon
질문자

답변 주셔서 감사합니다!!

y와 x가 101이라고 뜬 부분은 이미 낚시꾼이 잡았던가 서로 먹혔을경우 주어진 matrix밖으로 내보냈다는 의미고 이경우 dir 이 0 이 되기 때문에 for loop상 계산은 되지만 실제로 연산되지 않아 움직이거나 계산중에 영향이 없다고 생각했습니다.

저도 선생님이 알려주신대로 디버깅 코드를 넣어서 확인했고, 불필요한 연산이 들어가 예상치못한 결과가 나왔나 싶어서

if( y == 101 && x == 101) continue;

를 70번째 줄에 추가해서 더이상 연산이 되지 않게 했는데도 불구하고 역시나 제출후 바로 '틀렸습니다' 라고 나옵니다.

10 10 2
1 9 8 2 1
5 10 7 4 2

와 같은 반례를 넣어도 손으로 하나하나 계산한 값과 동일하게 나와서, 알고리즘에는 문제가 없어보이는데, 어떤부분이 잘못되었는지 모르겠습니다.

이럴경우 할 수있는 반례 생각이나 디버깅 접근방법이 있나요..?

 

큰돌님의 프로필 이미지
큰돌
지식공유자

이거 제가 한 30분 이상은 봤는데.. 되게 애매하네요. 전체적인 로직은 잘 짰습니다.

(제가 생각한 반례 다 넣어봤는데 잘 나옵니다..)

근데 틀린다고 나오죠?

이러한 부분 같은 경우는.

불필요한 변수, 로직 등을 제거하면서 디버깅하셔야 해요.

제가 걸리는부분은 2가지인데 101 그부분이랑 while문 쓰지 않고 if문 한번 더 써서 한 건데...

101은 죽은 것을 표현하기 위해 범위 이상값으로 하신거 잘하신 거고 while문을 쓰지 않고 한점. 어차피 2번 이상은 발생되지 않기 때문에 그렇게 하신 거 같은데 잘하셨는데...

제 역량이 부족해서 반례가 잘 안떠오르네요 ㅠㅠ

일단 어느정도 더 해보시고 안되면 일단 넘어가주세요.

나중에 한번 더 보겠습니다.

감사합니다.

 

Hyoungku Jeon님의 프로필 이미지
Hyoungku Jeon
질문자

세심하게 봐주셔서 감사합니다 ㅠㅜ

저도 죽은거를 표현하기 위해 고민하다가 101같은 로직을 넣은거거든요.

저도 좀 찝찝했던건, 모든 상어id를 한번 확인하는 for문에서 죽은거를 무시한다 하더라도 어찌되었든 한번은 죽은 상어를 방문하게 되니깐 로직이 조금 더러워지는 부분입니다.

웃기게도 Test case와 넣을 만한 다른 반례들은 다 잘나와서 머리가 아프네요..

저도 kill부분 좀 뜯어보다가 안되면 말씀대로 우선 넘어가겠습니다

 

감사합니다!

Hyoungku Jeon님의 프로필 이미지
Hyoungku Jeon

작성한 질문수

질문하기