https://www.acmicpc.net/problem/14890
package Main;
import java.util.Scanner;
public class Main {
public static int N,L;
public static int[][] map;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N=sc.nextInt();
L=sc.nextInt();
map = new int[N][N];
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
map[i][j] = sc.nextInt();
}
}
int count = 0;
for(int i=0;i<N;i++) {
if(calRow(i)) count++; //i번째 열 확인
if(calCol(i)) count++; //i번째 열 확인
}
System.out.println(count);
}
//이런 문제의 핵심은 안되는 경우가 잇을경우를 먼저 지워주는 것
//높이차 1일때 false return
//또한 계단문제에서 변화가 발생하는것은 계단의 높이가 다음계단과 차이점이 있을때 이벤트가 발생하는것이다.
public static boolean calRow(int row) {
boolean[] isIncline = new boolean[N]; //경사면 설치여부 확인
for(int i=0;i<N-1;i++) {
int diff = map[row][i] - map[row][i+1];
//if(diff == 1) continue;
if(diff > 1 || diff < -1) return false; //높이차 1 초과하므로 false
else if(diff == -1) { //다음계단이 한계단 높은 경우
for(int j=0; j<L; j++) { //올라가는 경사로를 설치할 수 있는지 확인
if( i-j < 0 || isIncline[i-j]) return false;
if(map[row][i] != map[row][i-j]) return false;
isIncline[i-j] = true;
}
}
else if(diff == 1) { //다음계단이 한계단 낮다
for(int j=1;j<=L;j++) {
if( i+j >= N || isIncline[i+j]) return false;
if(map[row][i] -1!= map[row][i+j]) return false;
isIncline[i+j] = true;
}
}
}
return true;
}
public static boolean calCol(int col) {
boolean[] isIncline = new boolean[N]; //경사면 설치여부 확인
for(int i=0;i<N-1;i++) {
int diff = map[i][col] - map[i+1][col];
//if(diff == 1) continue;
if(diff > 1 || diff < -1) return false;
else if(diff == -1) {
for(int j=0;j<L;j++) {
if( i-j <0 || isIncline[i-j]) return false;
if(map[i][col] != map[i-j][col]) return false;
isIncline[i-j] = true;
}
}
else if(diff==1) {
for(int j=1;j<=L;j++) {
if(i+j >=N || isIncline[i+j]) return false;
if(map[i][col] -1!= map[i+1][col]) return false;
isIncline[i+j]= true;
}
}
}
return true;
}
}
이문제에서 느낀점은 너무 다 생각하지말고 일단 문제에 있는것만 구현하는것입니다.
이런 문제의 핵심은 안되는 경우가 잇을경우를 먼저 지워주는 것
높이차 1일때 false return
또한 계단문제에서 변화가 발생하는것은 계단의 높이가 다음계단과 차이점이 있을때 이벤트가 발생하는것입니다.
'알고리즘 > 삼성SW' 카테고리의 다른 글
[삼성 SW 역량 테스트 기출 문제] 주사위 굴리기 2 - 레벨1 (0) | 2022.07.05 |
---|---|
[삼성 SW 역량 테스트 기출 문제] 마법사 상어와 비바라기 - 레벨1 (0) | 2022.07.04 |
[삼성 SW 역량 테스트 기출 문제] 마법사 상어와 토네이도 - 레벨1 (0) | 2022.07.02 |
[삼성 SW 역량 테스트 기출 문제] 미세먼지 안녕! - 레벨1 (0) | 2022.04.26 |
[삼성 SW 역량 테스트 기출 문제] 드래곤 커브 - 레벨1 (0) | 2022.04.05 |