개발놀이터

2-10. 봉우리 본문

기타/코딩테스트

2-10. 봉우리

마늘냄새폴폴 2023. 2. 14. 12:44

package 배열1차원2차원.봉우리2다시10.my;

import java.util.Scanner;

public class Main {

    /**
     * -내 풀이-
     * 좀 더 객체지향스럽게 구현하고자 기준점이 되는 값을 기준으로 왼쪽 오른쪽 위쪽 아래쪽을 비교하는 각각의
     * 메서드를 만들어서 코드가 좀 깔끔해보이게 만들었다.
     *
     * -선생님의 풀이-
     * dx, dy 의 개념을 도입해서 시계방향으로 인덱스를 검사하여 값을 확인하는 로직을 구현하셨다.
     * 근데 너무 어지럽게 코드가 짜여져있고 3중 for 문에 안에 if 문까지 있어서 읽기 굉장히 힘듦
     * 개인적으로는 내 코드가 좀 더 깔끔하고 읽기 편하기 때문에 이 문제의 정답은 내 코드로 결정
     */

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

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

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

    private static int solution(int input, int[][] arr) {
        int answer = 0;
        int[][] plat = new int[input + 2][input + 2];

        for (int i = 0; i < input ; i++) {
            for (int j = 0; j < input ; j++) {
                plat[i + 1][j + 1] = arr[i][j];
            }
        }

        for (int i = 1; i <= input; i++) {
            for (int j = 1; j <= input; j++) {
                if (isLeftThenBigger(plat[i][j], plat[i][j + 1]) && isRightThenBigger(plat[i][j], plat[i][j - 1]) &&
                isUpThenBigger(plat[i][j], plat[i - 1][j]) && isUnderThenBigger(plat[i][j], plat[i + 1][j])) {
                    answer++;
                }
            }
        }

        return answer;
    }

    private static boolean isLeftThenBigger(int num, int left) {
        if (left < num) {
            return true;
        }
        return false;
    }

    private static boolean isRightThenBigger(int num, int right) {
        if (num > right) {
            return true;
        }
        return false;
    }

    private static boolean isUpThenBigger(int num, int up) {
        if (num > up) {
            return true;
        }
        return false;
    }

    private static boolean isUnderThenBigger(int num, int under) {
        if (num > under) {
            return true;
        }
        return false;
    }
}

 

package 배열1차원2차원.봉우리2다시10.teacher;

import java.util.Scanner;

public class Main {

    static int[] dx = {-1, 0, 1, 0};
    static int[] dy = {0, 1, 0, -1};

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[][] arr = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = kb.nextInt();
            }
        }
        System.out.println(solution(n, arr));
    }

    private static int solution(int n, int[][] arr) {
        int answer = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                boolean flag = true;
                for (int k = 0; k < 4; k++) {
                    int nx = i + dx[k];
                    int ny = i + dy[k];
                    if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] >= arr[i][j]) {
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    answer++;
                }
            }
        }

        return answer;
    }
}

 

이번만큼은 선생님보다 잘 풀었다고 자부할 수 있다. 처음 코드를 작성할 때부터 객체지향스럽게 만들어야겠다는 생각을 하고 만들어서 그런지 좀 더 코드가 깔끔하게 나온 듯 하다. 

 

 

'기타 > 코딩테스트' 카테고리의 다른 글

2-12. 멘토링  (0) 2023.02.14
2-11. 임시반장  (0) 2023.02.14
2-9 격자판 최대합  (0) 2023.02.14
2-8. 등수 구하기  (0) 2023.02.14
2-7. 점수 계산  (0) 2023.02.14