유미의 기록들

[백준 4주차 - 14890] 경사로 (Java) 본문

코딩테스트 기록/알고리즘 문제

[백준 4주차 - 14890] 경사로 (Java)

지유미 2024. 4. 16. 21:11
728x90
반응형

📌 문제

 

 

📝 풀이과정

1. 열을 확인하는 방향과 행을 확인하는 방향이 있어야 하므로 열과 행이 바뀐 행렬을 만들어서 map을 두개로 만들어 주었다. 

 

2. map1 과 map2는 같은 로직으로 행마다 지나갈 수 있는 길인지 체크한다

   2-1. 각 행에서 현재 값과 다음 열의 값과 같다면 cnt++

   2-2. 현재값이 다음 열의 값보다 높이 차이가 1 작고 cnt가 l이상이면 cnt=1 

   2-3. 현재 값이 다음 열의 값보다 높이 차이가 1 크고 cnt가 0이상이면 cnt=- l+1

 

   2-4. 각 행의 끝까지 돌아서 cnt가 0이상이면 길의 개수 증가

 

💻 코드

import java.util.*;
import java.io.*;
public class Main{
	static int n,l,ret;
	static int map1[][];
	static int map2[][];
	static void go(int[][]map){
		for(int i=0;i<n;i++){
			int cnt=1;
			int j;
			for(j=0;j<n-1;j++){
				if(map[i][j]==map[i][j+1]){
					cnt++;
				}
				else if(map[i][j]+1==map[i][j+1] && cnt>=l){
					cnt=1;
				}
				else if(map[i][j]-1==map[i][j+1] && cnt>=0){
					cnt=-l+1;
				}else{
					break;
				}
			}
			if(j==n-1 && cnt>=0){
				ret++;
			}
		}
	}
    public static void main(String[] args) throws IOException{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		st=new StringTokenizer(br.readLine());
		
		n=Integer.parseInt(st.nextToken());
		l=Integer.parseInt(st.nextToken());
		map1=new int[n][n];
		map2=new int[n][n];
		
		for(int i=0;i<n;i++){
			st=new StringTokenizer(br.readLine());
			for(int j=0;j<n;j++){
				map1[i][j]=Integer.parseInt(st.nextToken());
				map2[j][i]=map1[i][j];
			}
		}
		go(map1);
		go(map2);
		System.out.println(ret);
    }
}
728x90
반응형
Comments