-
[BOJ] #14890 _ 경사로Problem Solving/BOJ 2019. 10. 20. 23:24
[경사로] https://www.acmicpc.net/problem/14890
해당 문제는 SWEA의 활주로 건설과 동일한 문제로 시뮬레이션 문제이다.
다시 풀어보았는데, SWEA 때와는 또 다른듯 비슷하게 구현한 것 같다.
개인적인 느낌으로 좀 더 간결해진 것 같다.[ 소스 코드 ]
#include <cstdio> #include <cmath> #include <algorithm> #define MAX 100 using namespace std; int N, L; int map[MAX][MAX]; int solve(); int main() { scanf("%d %d", &N, &L); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) scanf("%d", &map[i][j]); } printf("%d\n", solve()); return 0; } int solve() { int possible = 0, pre, cnt, chk; int i, j; for (i = 0; i < N; i++) { // 가로 pre = map[i][0]; cnt = 1; chk = 0; for (j = 1; j < N; j++) { if (abs(pre - map[i][j]) > 1) break; else if (abs(pre - map[i][j]) == 1) { if (chk) { if (cnt < L) break; else { chk = 0; cnt -= L; } } if (pre < map[i][j]) { if (cnt < L) break; } else chk = 1; pre = map[i][j]; cnt = 1; } else cnt++; } if (j < N) continue; if (chk) { if (cnt < L) continue; } possible++; } for (i = 0; i < N; i++) { // 세로 pre = map[0][i]; cnt = 1; chk = 0; for (j = 1; j < N; j++) { if (abs(pre - map[j][i]) > 1) break; else if (abs(pre - map[j][i]) == 1) { if (chk) { if (cnt < L) break; else { chk = 0; cnt -= L; } } if (pre < map[j][i]) { if (cnt < L) break; } else chk = 1; pre = map[j][i]; cnt = 1; } else cnt++; } if (j < N) continue; if (chk) { if (cnt < L) continue; } possible++; } return possible; }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #15684 _ 사다리 조작 (0) 2019.10.21 [BOJ] #15683 _ 감시 (0) 2019.10.20 [BOJ] #14500 _ 테트로미노 (0) 2019.10.20 [BOJ] #13458 _ 시험 감독 (0) 2019.10.20 [BOJ] #12100 _ 2048(Easy) (0) 2019.10.20 댓글