• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

질문이 있어서 남겨봅니다..

23.07.21 18:09 작성 23.07.21 18:26 수정 조회수 212

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값을 구하고 있는 코드입니다.