인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

진욱's profile image
진욱

asked

Introduction to Javascript Algorithm Problem Solving (Coding Test Preparation)

7. Peak

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

Written on

·

271

·

Edited

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 변수로 아닌 것을 찾아서 숫자를 늘려주는 것과 맞는 경우에 늘려주는 것이 어떤 차이가 있는건지 헷갈리네요...

javascript코딩-테스트

Answer 1

0

codingcamp님의 프로필 이미지
codingcamp
Instructor

안녕하세요^^

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

 

진욱's profile image
진욱

asked

Ask a question