📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
https://www.acmicpc.net/problem/14890
package implement;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Implement14890 {
static int N;
static int L;
static int[][] map;
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());
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 result = solution();
System.out.println(result);
}
private static int solution() {
int answer = 0;
// 가로 줄 체크
for (int i = 0; i < N; i++) {
int[] row = new int[N];
for (int j = 0; j < N; j++) {
row[j] = map[i][j];
}
if (check(row)) {
answer++;
}
}
// 세로 줄 체크
for (int i = 0; i < N; i++) {
int[] col = new int[N];
for (int j = 0; j < N; j++) {
col[j] = map[j][i];
}
if (check(col)) {
answer++;
}
}
return answer;
}
private static boolean check(int[] line) {
boolean[] visit = new boolean[N];
for (int i = 0; i < N - 1; i++) {
int diff = line[i + 1] - line[i];
// 같을때 넘기기
if (diff == 0) {
continue;
}
// 양수 오르막길
else if (diff == 1) {
for (int j = 0; j < L; j++) {
int idx = i - j;
if (idx < 0 || line[i] != line[idx] || visit[idx]) {
return false;
}
visit[idx] = true;
}
}
// 음수 내리막길
else if (diff == -1) {
for (int j = 0; j < L; j++) {
int idx = i + j + 1;
if (idx >=N || line[i+1] != line[idx] || visit[idx]) {
return false;
}
visit[idx] = true;
}
}
// 차이가 2 이상이면 false
else {
return false;
}
}
return true;
}
}
diff 차를 구해 1이면 오르막길, -1이면 내리막길로 나눠 경우를 처리하면 된다. 오르막길일 경우, 현재 위치 기준으로 이전 위치들이 같은 높이인지, 그리고 이미 경사로가 설치되지 않았는지(방문 여부)를 조건으로 확인하면 되고, 내리막길은 반대로 현재 위치에서 +1, +2 위치를 기준으로 같은 방식으로 확인하면 된다.
골드3이지만 비교적 단순한 구현 문제... 더 분발해야겠다.
[백준 14500번] 테트로미노 (0) | 2025.05.18 |
---|---|
[백준 12100번] 2048(Easy) (0) | 2025.05.16 |
[백준 14719번] 빗물 (0) | 2025.05.15 |
[백준 11066번] 파일 합치기 (0) | 2025.05.12 |
[백준 3190번] 뱀 (0) | 2025.04.01 |