작성
·
360
·
수정됨
0
선생님께서 풀어주신 풀이에서
if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]){
flag = 0;
break;
}
if(flag) answer++;
이 부분에서 질문이 있습니다. if 문에서 nx, ny가 각각 0이상이고 n미만이면서 arr[i][j]보다 arr[nx][ny]가 크다면 flag를 0으로 만드는 것이고 이에 해당하지 않는거라면 다 answer++를 하는 것으로 이해했는데요.
&&연산자를 써서 위 조건 중 하나라도 해당하지 않는다면 answer++ 로 이어지는 걸로 알고 있습니다. 그렇다면 arr[1][0] =3을 기준으로 봤을때 왼쪽이 arr[1][-1]가 나오기 때문에 ny<0으로 해당 if문 조건을 충족시키지 못해 answer++로 이어지는 것 아닌가요?
arr[1][-1]이라면 undefined가 나올텐데 이럴 땐 어떻게 되는 지 궁금합니다. 알아서 무시해버리나요?
답변 1
0
안녕하세요^^
nx>=0 && nx<n && ny>=0 && ny<n 이 4개 조건 중 하나라도 거짓이면 arr[nx][ny]>=arr[i][j] 비교 자체를 하지 않습니다. arr[1][-1]은 ny>=0 조건이 거짓이 되기 때문에 arr[nx][ny]>=arr[i][j] 비교자체를 하지 않고 그냥 지나갑니다.
arr[1][0]이 answer++로 이어지려면 arr[1][0]과 상하좌우 인접한 4개를 다 비교해서 if문이 4개 모두 거짓이 나와 flag가 초기값인 true값 그대로 있어야 합니다.
그럼 arr[1][0]의 왼쪽은 아예 무시해버리는 건가요? 다른 오른쪽 상 하 모두 flag =0을 만들어서 결국에는 answer에 반영은 안될텐데...