-
[JAVA] SWEA 4014 활주로 건설알고리즘 공부/문제 풀이 2021. 10. 6. 17:03
문제 설명은 링크를 이용해주세요.
import java.util.*; import java.io.*; public class Solution { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int t=1; t<=T; t++) { StringTokenizer st = new StringTokenizer(br.readLine()); int N = Integer.parseInt(st.nextToken()); int X = Integer.parseInt(st.nextToken()); int[][] map = new int[N][N]; for(int i=0;i<N;i++) { st = new StringTokenizer(br.readLine()); for(int j=0;j<N;j++) map[i][j] = Integer.parseInt(st.nextToken()); } int ans = 0; next: for(int i=0; i<N;i++) { int cnt = 1; boolean down = false; for(int j=1; j<N;j++) { if(map[i][j-1]==map[i][j]) cnt++; else if(map[i][j-1]+1==map[i][j]) { //오르막, 이전의 개수 확인 if(down && cnt<2*X) continue next; if(!down && cnt<X) continue next; down = false; cnt = 1; } else if(map[i][j-1]-1==map[i][j]) { //내리막, 이후 개수 확인 if(down && cnt<X) continue next; down = true; cnt = 1; } else continue next; } if(!down || down && cnt>=X) ans++; } next: for(int i=0; i<N;i++) { int cnt = 1; boolean down = false; for(int j=1; j<N;j++) { if(map[j-1][i]==map[j][i]) cnt++; else if(map[j-1][i]+1==map[j][i]) { //오르막, 이전의 개수 확인 if(down && cnt<2*X) continue next; if(!down && cnt<X) continue next; down = false; cnt = 1; } else if(map[j-1][i]-1==map[j][i]) { //내리막, 이후 개수 확인 if(down && cnt<X) continue next; down = true; cnt = 1; } else continue next; } if(!down || down && cnt>=X) ans++; } System.out.println("#"+t+" "+ans); } } }
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[JAVA] 백준 4095 최대 정사각형 (0) 2021.10.08 [JAVA] 백준 2638 치즈 (0) 2021.10.07 [JAVA] 백준 17471 게리맨더링 (0) 2021.10.06 [JAVA] SWEA 탈주범 검거 (0) 2021.09.30 [JAVA] SWEA 보급로 (0) 2021.09.30