작성
·
257
·
수정됨
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
function solution(arr) {
let answer = 0;
let dx = [-1, 0, 1, 0];
let dy = [0, -1, 0, 1];
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr.length; j++) {
console.log(arr[i][j]);
for (let k = 0; k < 4; k++) {
let nx = i + dx[k];
let ny = j + dy[k];
if (
nx >= 0 &&
nx < arr.length &&
ny < arr.length &&
ny >= 0 &&
arr[i][j] > arr[nx][ny]
) {
answer++;
}
}
}
}
return answer;
}
알려주신 것처럼 flag 변수로 아닌 것을 찾아서 숫자를 늘려주는 것과 맞는 경우에 늘려주는 것이 어떤 차이가 있는건지 헷갈리네요...
답변 1
0
안녕하세요^^
function solution(arr) {
let answer = 0;
let dx = [-1, 0, 1, 0];
let dy = [0, -1, 0, 1];
for (let i = 2; i <= 2; i++) {
for (let j = 2; j <= 2; j++) {
for (let k = 0; k < 4; k++) {
let nx = i + dx[k];
let ny = j + dy[k];
if (
nx >= 0 &&
nx < arr.length &&
ny < arr.length &&
ny >= 0 &&
arr[i][j] > arr[nx][ny]
) {
answer++;
}
}
}
}
return answer;
}
let arr=[[5, 3, 7, 2, 3],
[3, 7, 1, 6, 1],
[7, 2, 5, 3, 4],
[4, 3, 6, 4, 1],
[8, 7, 3, 5, 2]];
console.log(solution(arr));
위에 코드처럼 하면 2중 for문이 2행 2열의 값 즉 arr[2][2]의 값 5만 한 번 탐색하고 끝나는 2중 for문입니다. 그리고 answer의 값은 arr[2][2]의 네 방향으로 인접한 격자값과 arr[2][2]과 비교해서 인접한 4방향의 격자값이 arr[2][2]의 값보다 작은 경우의 수를 구하고 있습니다. 아마 위에 코드를 실행하면 3이 나올겁니다. arr[2][2]의 인접한 4개의 값 1, 3, 6, 2(12시방향부터 시계방향으로) 중 arr[2][2]의 값 5보다 작은 경우는 1, 3, 2 이렇게 3개이기 때문입니다. 결론적으로 님이 올려주신 코드는 모든 격자에서 위와 같이 4방향을 탐색하면서 자신보다 값이 작은 격자가 발견될 경우 1씩 증가하는 answer값을 구하고 있는 코드입니다.