티스토리 뷰

알고리즘/코딩테스트 공부

2-7 봉우리

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 11. 27. 02:00

문제

지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자
판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개
있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.

 

풀이

function solution(arr) {
  let answer = 0;
  let n = arr.length;
  let dx = [-1, 0, 1, 0];
  let dy = [0, 1, 0, -1];
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      let flag = 1;
      for (let k = 0; k < dx.length; k++) {
        let nx = i + dx[k];
        let ny = j + dy[k];
        if (
          nx >= 0 &&
          nx < n &&
          ny >= 0 &&
          ny < n &&
          arr[nx][ny] >= arr[i][j]
        ) {
          //console.log("iam");
          flag = 0;
          break;
        }
      }
      if (flag) {
        //console.log(flag);
        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));

행,열을 이중for문으로 나타내어주고 , 숫자를 위아래 양옆으로 비교를 해야해서 dx,dy라는 배열을 만들어 4번 실행하는 for문을 만들어 비교하였습니다. 사방의 숫자가 자기 자신보다 크다면 flag 변수를 0으로 만들어 나중에 체크해서 1일 경우에만 answer에 ++해주었습니다

'알고리즘 > 코딩테스트 공부' 카테고리의 다른 글

3-2 유효한 팰린드롬  (0) 2021.11.27
3-1 회문 문자열  (0) 2021.11.27
2-6 격자판 최대합  (0) 2021.11.26
2-5 등수구하기  (0) 2021.11.26
2-4 점수계산  (0) 2021.11.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함