10. 봉우리

2023. 9. 14. 08:56·알고리즘/Array(1, 2차원 배열)

1. 문제

봉우리를 구하는 문제이다.

N * N 격자판의 숫자 중, 자신의 상하좌우 보다 큰 숫자를 봉우리 지역이라한다.

격자의 가장 자리는 0으로 초기화 되어있다.

칭하고 봉우리 지역의 개수를 출력하자. 

 

 

 

2 - 1. 나의 풀이

이 문제도 쉽지만, 배열을 다루는 만큼 배열 범위를 넘지 않게 조심하자!

 

1. 가장자리를 0 으로 초기화 하기 위해 int 배열의 크기를 [n+2][n+2]로 초기화한다.

2. 봉우리를 찾는다. i 는 1부터 n +1 번째 인덱스까지!

3. 봉우리를 count 해주면 끝

 

2 - 2. 나의 코드

package Algorythm_Array;

import java.util.Scanner;

public class Array10 {
    public static int solution(int[][] intArr, int n) {
        int count =0;
        //반복 범위를 1 부터 n + 1 까지 (가장자리 0은 탐색하지 않으므로.)
        for (int i = 1; i < n + 1; i++) {
            for (int j = 1; j < n + 1; j++) {
            	//상하좌우 보다 크면 count++
                if( (intArr[i][j]  > intArr[i-1][j]) && (intArr[i][j]  > intArr[i +1][j]) &&
                        (intArr[i][j]  > intArr[i][j-1]) && (intArr[i][j]  > intArr[i][j+1])) count++;
            }
        }

        return count;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] intArr = new int[n + 2][n + 2];

        for (int i = 1; i < n + 1; i++) {
            for (int j = 1; j < n + 1; j++) {
                intArr[i][j] = sc.nextInt();
            }
        }
        System.out.println(solution(intArr , n));
    }
}

 

3 - 1. 강의 풀이

삼중 for문으로 문제를 풀이한다.

간결하고 좌표적으로 해석해서 푼거같다.

가장자리 0을 배열을 확장해 표현하지 않고 조건으로 따져서 푼다.

 

1. dx와 dy 에 상하좌우에 접근하기 위한 숫자를 미리 초기화한후

이중 for문 안에 for문을 하나 추가해(총, 삼중 for문) nx = i + dx[k]; ny = i + dy[k]; 로 상하좌우에 접근한다.

2. flag 개념을 사용해 조건에 어긋나면 flag 를 false로 돌리고 flag가 true 일 때만 카운팅한다.

 

 

3 - 2. 강의 코드

import java.util.Scanner;

public class Array10_solution {
    public static int solution(int[][] arr, int n) {
        int answer=0;
        //상하좌우 인덱스에 접근하기위해 dx, dy를 사용한다.
        //dx, dy를 사용하기 위해서 for문을 기존 보다 한 번 더 돈다.
        int[] dx = {-1, 0, 1, 0};
        int[] dy = { 1, 0,-1, 0};

        for (int i = 0; i < n; i++) {
            boolean flag = true;
            for (int j = 0; j < n; j++) {
                //아래 반복문이 끝나면 한 격자칸의 숫자 상하좌우 탐색이 끝.
                for (int k = 0; k < 4; k++) {
                    int nx = i + dx[k];
                    int ny = i + dy[k];
                    //상하좌우로 갈때 인덱스 범위를 넘어가면 안되므로 조건을 걸어준다.
                    //(arr[nx][ny] >= arr[i][j]) 이 부분을 꼭 조건 마지막에 달아야함!
                    if( nx > 0 && nx < n && ny <0 && ny <n && (arr[nx][ny] >= arr[i][j])){
                        flag = false;
                        break;
                    }
                }/*탐색 끝*/ if(flag==true) answer++;
            }
            
        }
        
        return answer;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[n][n];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = sc.nextInt();
            }
        }

        System.out.println(solution(arr, n));
    }
}

 

4. 얻어갈 점

1. 반복적인 좌표적 접근의 새로운 풀이법 (미리 움직일 만큼을 초기화하고 for문 돌리기 ex)dx, dy)

2. flag 개념

'알고리즘 > Array(1, 2차원 배열)' 카테고리의 다른 글

12. 멘토링  (1) 2023.09.17
11. 임시반장 정하기  (2) 2023.09.16
9. 격자판 최대합  (0) 2023.09.14
8. 등수 구하기  (1) 2023.09.11
7. 점수 계산  (0) 2023.09.10
'알고리즘/Array(1, 2차원 배열)' 카테고리의 다른 글
  • 12. 멘토링
  • 11. 임시반장 정하기
  • 9. 격자판 최대합
  • 8. 등수 구하기
koreaioi
koreaioi
  • koreaioi
    koreaioi
    koreaioi
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • JAVA (2)
      • 알고리즘 (88)
        • 백준 (11)
        • String(문자열) (12)
        • Array(1, 2차원 배열) (13)
        • Two pointers, Sliding windo.. (6)
        • HashMap, TreeSet(해쉬, 정렬지원 S.. (5)
        • Stack, Queue(자료구조) (8)
        • Sorting and Searching(정렬, 이.. (10)
        • Recursive, Tree, Graph(DFS,.. (14)
        • DFS, BFS 활용 (6)
        • 다시 시작! (1)
        • 기초 수학 (1)
      • 일상 (22)
      • Github (1)
      • MSA 공부 (4)
      • 경제, 금융, 디지털, 시사 (3)
      • 라즈베리파이 (10)
      • 프로젝트에서 일어난 일 (15)
      • FrontEnd 공부 (9)
        • React (8)
      • Spring (2)
      • 기술 세미나 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
koreaioi
10. 봉우리
상단으로

티스토리툴바