μ•Œκ³ λ¦¬μ¦˜

11μ›” 3일 1문제 - Java : Array

1. λ΄‰μš°λ¦¬

지도 정보가 N*N κ²©μžνŒμ— μ£Όμ–΄μ§‘λ‹ˆλ‹€. 각 κ²©μžμ—λŠ” κ·Έ μ§€μ—­μ˜ 높이가 μ“°μ—¬μžˆμŠ΅λ‹ˆλ‹€.

각 격자판의 숫자 쀑 μžμ‹ μ˜ μƒν•˜μ’Œμš° μˆ«μžλ³΄λ‹€ 큰 μˆ«μžλŠ” λ΄‰μš°λ¦¬ μ§€μ—­μž…λ‹ˆλ‹€. λ΄‰μš°λ¦¬ 지역이 λͺ‡ 개 μžˆλŠ” 지 μ•Œμ•„λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

격자의 κ°€μž₯μžλ¦¬λŠ” 0으둜 μ΄ˆκΈ°ν™” λ˜μ—ˆλ‹€κ³  κ°€μ •ν•œλ‹€.

λ§Œμ•½ N=5 이고, 격자판의 μˆ«μžκ°€ λ‹€μŒκ³Ό κ°™λ‹€λ©΄ λ΄‰μš°λ¦¬μ˜ κ°œμˆ˜λŠ” 10κ°œμž…λ‹ˆλ‹€.


2차원 배열은 μ΅μˆ™ν•˜μ§€ μ•Šμ•„μ„œ λ°©ν–₯을 우째 for문에 담아야할지 감이 μ•ˆμ™€μ„œ κ°•μ˜λ₯Ό λ΄€λŠ”λ° 

보톡 이런 λ¬Έμ œμ—μ„œλŠ” 배열에 λ°©ν–₯을 λ¨Όμ € λ‹΄μ•„ 두고 그걸둜 2쀑 for문을 λŒμ•„μ•Ό ν•œλ‹€κ³  ν•œλ‹€.

 

 

import java.util.Scanner;

public class Test02_10 {

  public int solution(int[][] numberArray, int num) {
    // μƒν•˜μ’Œμš°
    int[] x = {-1, 0, 1, 0};
    int[] y = {0, 1, 0, -1};
    int result = 0;

    for (int i = 0; i < num; i++) {
      for (int j = 0; j < num; j++) {
        boolean check = true;
        for (int k = 0; k < 4; k++) {
        // ν•΄λ‹Ή μœ„μΉ˜μ— μžˆλŠ” μƒν•˜μ’Œμš°λ₯Ό 보기 μœ„ν•΄ + ν•΄μ€Œ
          int targetX = i + x[k];
          int targetY = j + y[k];
          // 밖에 μžˆλŠ” 숫자 듀은 μƒν•˜μ’Œμš°λ₯Ό 보면 indexκ°€ - κ°€ λ˜κ±°λ‚˜ μ˜€λ²„ 되기 λ•Œλ¬Έμ— 미리 걸러쀌
          if (targetX >= 0
              && targetX < num
              && targetY >= 0
              && targetY < num
              && numberArray[i][j] <= numberArray[targetX][targetY]) {
            check = false;
            break;
          }
        }
        if (check) result++;
      }
    }

    return result;
  }

  public static void main(String[] args) {
    Test02_10 main = new Test02_10();
    Scanner sc = new Scanner(System.in);
    int num = sc.nextInt();
    int[][] numberArray = new int[num][num];
    for (int i = 0; i < num; i++) {
      for (int j = 0; j < num; j++) {
        numberArray[i][j] = sc.nextInt();
      }
    }
    System.out.println(main.solution(numberArray, num));
  }
}
λ°˜μ‘ν˜•