• Home
  • About
    • Ryureka Moment photo

      Ryureka

      Sin Prisa, Sin Pausa

    • About Me
    • Facebook
    • Github
    • Youtube
  • Projects
  • Posts
    • Posts
    • ProblemSolvings
    • Tags
    • Blog
    • Examples
  • ProblemSolving
    • ProblemSolving
    • BOJ
    • Programmers
    • SWEA
    • LeetCode
  • FrontEnd
    • FrontEnd
    • HTML
  • BackEnd
    • BackEnd
    • Server
      • Server
      • Spring
      • NodeJS
    • DataBase
      • DataBase
      • MySQL
      • MongoDB
  • Programming
    • Programming
    • Java
    • JS
    • Python
    • CleanCode
  • ComputerScience
    • DataStructure
    • Algorithm

[BOJ] 14890. 경사로

15 Apr 2026

Reading time ~2 minutes

  • 풀이

풀이

import java.util.Scanner;

public class Main {
   static Scanner sc=new Scanner(System.in);
   static int N,X;
   static int dy[]= {0,1,-1,0,0};
   static int dx[]= {0,0,0,1,-1};
   static int map[][];
   static int used[][];
   public static void print(int arr[][]) {
      for (int i = 0; i < arr.length; i++) {
         for (int j = 0; j < arr.length; j++) {
            System.out.print(arr[i][j]+" ");
         }
         System.out.println();
      }
   }
   
   public static void clear(int arr[][]) {
      for (int i = 0; i < arr.length; i++) {
         for (int j = 0; j < arr.length; j++) {
            arr[i][j]=0;
         }
      }      
   }
   
   public static boolean check(int x,int y,int dir,int arr[][]) {
      int cnt=0;
      
      for (int i = 1; i <= X; i++) {
         int cx=x+i*dx[dir];
         int cy=y+i*dy[dir];
         if(cx<0 || cx>=N || cy<0 || cy>=N) {return false;}
         if(used[cx][cy]>=1) return false;
         if(arr[cx][cy]==arr[x][y]-1) {
            cnt++;
         }
      }
      
      if(cnt==X) {
         for (int i = 1; i <= X; i++) {
            int cx=x+i*dx[dir];
            int cy=y+i*dy[dir];
            used[cx][cy]++;
         }
         return true;
      }
      else return false;
   }
   
   
   public static void main(String[] args) {
         int ans = 0;
         N=sc.nextInt();
         X=sc.nextInt();
         map=new int[N][N];
         used=new int[N][N];
         for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
               map[i][j]=sc.nextInt();
            }
         }
         
//         print(map);
         
         for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
               if(j+1<N) {
                  if(map[i][j]==map[i][j+1]) {
                     if(j!=N-1) continue;
                  }
                  else if(map[i][j]==map[i][j+1]+1) {
                     if(!check(i,j,1,map)) {
                        break;
                     }
                  }else if(map[i][j]==map[i][j+1]-1) {
                     if(!check(i,j+1,2,map)) {
                        break;
                     }
                  }else {
                     break;
                  }
               }
               if(j==(N-1)) {
                  ans++;
               }
            }
            clear(used);
         }
         
//         System.out.println(ans);
         for (int j = 0; j < N; j++) {
            for (int i = 0; i < N; i++) {
               if(i+1<N) {
                  if(map[i][j]==map[i+1][j]) {
                     if(i!=N-1) continue;
                  }
                  if(map[i][j]==map[i+1][j]+1) {
                     if(!check(i,j,3,map)) {
                        break;
                     }
                  }else if(map[i][j]==map[i+1][j]-1) {
                     if(!check(i+1,j,4,map)) {
                        break;
                     }
                  }else {
                     break;
                  }
               }
               if(i==(N-1)) {
                  ans++;
               }
            }
            clear(used);
         }
         System.out.println(ans);
      
   }
}


구현 Share