코딩테스트 기록/알고리즘 문제
[백준 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
반응형