250104 경사로

Jongleee·2025년 1월 4일
0

TIL

목록 보기
774/816
public static void main(String[] args) throws Exception {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	StringTokenizer st = new StringTokenizer(br.readLine());

	int n = Integer.parseInt(st.nextToken());
	int l = Integer.parseInt(st.nextToken());
	int[][] map = new int[n][n];
	int[][] transposeMap = new int[n][n];

	for (int i = 0; i < n; i++) {
		st = new StringTokenizer(br.readLine());
		for (int j = 0; j < n; j++) {
			int value = Integer.parseInt(st.nextToken());
			map[i][j] = value;
			transposeMap[j][i] = value;
		}
	}

	int result = countValidPaths(map, n, l) + countValidPaths(transposeMap, n, l);
	System.out.println(result);
}

private static int countValidPaths(int[][] map, int n, int l) {
	int validPaths = 0;

	for (int i = 0; i < n; i++) {
		if (canPass(map[i], n, l)) {
			validPaths++;
		}
	}
	return validPaths;
}

private static boolean canPass(int[] row, int n, int l) {
	int prevLength = 1;

	for (int j = 0; j < n - 1; j++) {
		int diff = row[j + 1] - row[j];

		if (diff == 0) {
			prevLength++;
		} else if (diff == 1) {
			if (prevLength < l) {
				return false;
			}
			prevLength = 1;
		} else if (diff == -1) {
			if (!canBuildSlope(row, j + 1, l)) {
				return false;
			}
			j += l - 1;
			prevLength = 0;
		} else {
			return false;
		}
	}
	return true;
}

private static boolean canBuildSlope(int[] row, int start, int l) {
	int height = row[start];

	for (int i = start; i < start + l; i++) {
		if (i >= row.length || row[i] != height) {
			return false;
		}
	}
	return true;
}

출처:https://www.acmicpc.net/problem/14890

0개의 댓글

관련 채용 정보