해결된 질문
작성
·
148
0
if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]) {
flag = false;
break;
}
이 조건에 대해 질문이 있습니다.
nx>=0 && nx<n && ny>=0 && ny<n 이것이 가장자리를 찾는 조건식인 것은 알겠습니다.
그런데 if조건식이 and연산자로 이루어져있어서 하나라도 false이면 if문이 돌아가지 않는것으로 알고있습니다.
그럼 가장자리에 있는 값들 중에 arr[i][j]보다 큰 값들만 if문을 돌면서 flag를 false로 주는 것인데
가장자리가 아니면서 arr[i][j]보다 큰 값들은 어디서 비교를 하나요??
또, arr의 n의 개수를 그냥 n으로 잡으면 가장자리를 0으로 초기화를 언제 시키는 것인지 궁금합니다
제가 처음 풀었을때 arr을 arr[n+2][n+2]로 잡고 (i=1;i<n;i++)로 이중for문을 돌려 풀었습니다 이렇게 풀어도 되는건가요?
답변 1
0
안녕하세요. 저도 초보 수강생이지만, 제가 이해한 바를 토대로 답변을 드리자면
질문1. nx>=0 && nx<n && ny>=0 && ny<n 이것이 가장자리를 찾는 조건식인 것은 알겠습니다.
가장자리가 아니면서 arr[i][j]보다 큰 값들은 어디서 비교를 하나요??
답변
"가장 자리"라는게 (0,0)기준으로한다면, 왼쪽, 위쪽 좌표를 표현하신거죠? 맞다면,
if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]) { }
위 조건문은 가장자리가 아니면서 + 타겟 봉우리보다 더 큰경우 (->봉우리가 아니다) 로직입니다.
가장자리는 검증할 필요가 없습니다.(가장자리의 높이를 0이라 생각하면 될거같습니다. 0이라 타겟 봉우리보다 항상 낮으니까 검증할 필요가 없는거죠)
질문2. "또, arr의 n의 개수를 그냥 n으로 잡으면 가장자리를 0으로 초기화를 언제 시키는 것인지 궁금합니다"
답변: 선생님의 풀이코드는 "가장자리를 0으로 초기화할 필요 없이, 그냥 무시하는 풀이" 입니다.
가장자리는 if(nx>=0 && nx<n && ny>=0 && ny<n) 이 조건문안으로 들어가지 않습니다.
예를 들자면, 1x1 arr가 있으면, 사방면이 전부 가장자리가 되잖아요?
4면 모두가 위 조건문 내부로 들어가지 않아, 결국 봉우리로 판단 되는 동작이죠.
화이팅 하세요~!
자세한 설명 감사합니다 !! 토대로 이해해볼게요 !!