잃어버린 강아지 문제 count 관련 질문있습니다
202
2 asked
안녕하세요 강사님 강의 잘 듣고 있습니다!
잃어버린 강아지 문제에서 count관련 이해가 안되는 부분이 있어서요. 관련 부분만 가져왔는데 count는 처음에 0으로 초기화 된 상태에서 while문에 들어가자마자 1이 증가하고, 마지막으로 들어갈 때는 9999상태에서 들어가서 10000이 되고, 그시점에 마지막 번째 while을 실행하면서 현수가 강아지를 찾아서 x1 == x2 && y1 == y2이 된 후 break(사실상 while문이 끝나서 break된거나 마찬가지지만)될수도 있는건데 강아지를 못찾고 반환하는 0을 리턴하는 조건이 count >= 10000이 되면 10000번째에 찾더라도 못찾은걸로 표현될수 있지 않나 싶어서요.
그런데 이런 생각을 하다보니까 그러면 진짜로 10000을 넘을때까지 못찾는 경우는 어떻게 알수 있게 되지? 라는 생각이 들면서 정리가 안되기 시작했습니다. ㅠㅠ count가 while안에 있기 때문에 10000번째에 딱 찾고 끝나고 나면 더이상 count를 올려줄 방법이 없는데, 어떻게 해야 만번 이상을 했고 그래도 찾을수 없었던걸 증명할수 있을지...
일단 생각으로는 while을 true로 해놓고 break하는 조건을 하나 더 둬서 if(x1 == x2 && y1 == y2) break; 아래에 if(count == 10000) break;나 if(count >= 10000) break; 이렇게 하는 방법이 떠오르긴 하는데 이렇게 해도 괜찮을지, 강사님이 해주신 코드로 충분한데 제가 이해를 못하고 있는것일지.. 설명 늘 자세히 해주시는데도 질문해서 죄송합니다🥲 항상 감사합니다
int d1 = 0, d2 = 0, count = 0;
while (count < 10000) {
count++;
int nx1 = x1 + dx[d1];
int ny1 = y1 + dy[d1];
int nx2 = x2 + dx[d2];
int ny2 = y2 + dy[d2];
boolean flag1 = true, flag2 = true;
if (nx1 < 0 || nx1 >= n || ny1 < 0 || ny1 >= n || board[nx1][ny1] == 1){
d1 = (d1 + 1) % 4;
flag1 = false;
}
if (nx2 < 0 || nx2 >= n || ny2 < 0 || ny2 >= n || board[nx2][ny2] == 1){
d2 = (d2 + 1) % 4;
flag2 = false;
}
if(flag1 == true){
x1 = nx1;
y1 = ny1;
}
if(flag2 == true){
x2 = nx2;
y2 = ny2;
}
if(x1 == x2 && y1 == y2) break;
}
if (count >= 10000) return 0;
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
코드에서 count가 10000회를 넘어가는 경우에는 더 이상 강아지를 찾을 수 없다고 판단하여 0을 반환하는 로직을 작성하셨군요. 매우 중요한 포인트를 짚으신 것 같습니다. 김진하님께서 거론하신 문제를 해결하는 한 가지 방법은 while 문 내에서 강아지를 찾았을 때 바로 반환 값을 지정하는 것입니다. 즉, 강아지를 찾았을 때는 break; 대신 바로 return문을 통해 결과를 반환하면, 10000번째에서 강아지를 찾았는지 못 찾았는지 정확히 구분할 수 있습니다.
이에 따른 코드의 수정 예시는 다음과 같습니다.
//...
while (count < 10000) {
count++;
// ... (여기서는 이전 코드를 동일하게 사용)
if(x1 == x2 && y1 == y2) return 1; // 강아지를 찾았을 때 성공을 의미하는 1을 반환
}
return 0; // 10000번 시도했음에도 강아지를 못 찾은 경우
이렇게 하면 while문 내에서 강아지를 찾은 경우 즉시 성공을 반환하고, 반복문이 모두 실행된 후에는 실패를 반환하여, 정확하게 강아지를 찾았는지 못 찾았는지를 구분할 수 있습니다. 게다가 break문 없이 코드를 더 간결하게 만들 수 있습니다.
이런 접근 방법이 김진하님의 문제를 해결하는 데 도움이 되었기를 바랍니다. 혼란스러웠던 부분이 잘 정리되었길 바랍니다. 프로그래밍 공부에 항상 화이팅하세요!
비밀번호
0
65
1
과일 가져가기 이러한 경우에는 반례가 생기지 않나요?
0
161
2
cpu 스케줄링
0
105
2
외부 문제 질문
0
122
2
가장 많이 사용된 회의실
0
117
2
심사위원 문제 시간복잡도 질문
0
127
1
현관문 출입순서
0
96
1
미로의 최단거리 통로
0
74
1
집으로 이동 문제 코드
0
124
1
채점 사이트 개설
0
161
2
송아지를 잡자
1
110
1
다익스트라 + 환승횟수
0
135
2
문제풀이 해설 질문입니다.
0
124
2
"이동 횟수" 문제가 변형된다면?
0
155
2
예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ
0
248
1
"비밀번호" 문제 확인 부탁드립니다!
0
170
1
최대 길이 연속수열 질문
0
192
1
바둑대회 질문입니당
0
221
1
5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다
0
310
1
알파코드 풀이질문입니다
0
216
1
7번 비밀 번호 문제에 시간복잡도가 궁금합니다!
0
162
1
혹시 이렇게 작성해도 괜찮나요?
0
284
2
문제풀이 확인 부탁드립니다.
0
244
1
혼자서 푼 문제 확인 부탁드립니다.
0
298
1

