https://www.acmicpc.net/problem/14890
14890๋ฒ: ๊ฒฝ์ฌ๋ก
์ฒซ์งธ ์ค์ N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋์ด๋ 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
1. ๋ฌธ์
NxN ํฌ๊ธฐ์ map์์ ์ค๋ฅด๋ง๊ธธ, ๋ด๋ฆฌ๋ง๊ธธ ๊ฒฝ์ฌ๋ก๋ฅผ ์์ ํ๊ฒ ๋์ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
2. ํ์ด
์ด ๋ฌธ์ ๋ ๋์น๋ ์กฐ๊ฑด ์์ด ๊ผผ๊ผผํ๊ฒ ๋ด์ผ ํ๋ ๋ฌธ์ ์ด๋ค.
๊ธธ์ ์ง๋๊ฐ ์ ์๋ ๊ฒฝ์ฐ๋ 3๊ฐ์ง ์ด๋ค.
1. ์ด์ ๊ฐ๊ณผ ํ์ฌ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ
2. ์ด์ ๊ฐ๊ณผ ํ์ฌ๊ฐ์ด 1 ์ฐจ์ด ๋ ๊ฒฝ์ฐ => ๊ฒฝ์ฌ๋ฉด
1) ํ์ฌ๊ฐ์ด ์ด์ ๊ฐ๋ณด๋ค ํด ๋(์ค๋ฅด๋ง๊ธธ) - ๊ฐ์๊ฑฐ L๊ฐ๋ฅผ ์ง๋์์ ๊ฒฝ์ฐ
2) ์ด์ ๊ฐ์ด ํ์ฌ๊ฐ๋ณด๋ค ํด ๋(๋ด๋ฆฌ๋ง๊ธธ) - ๊ฐ์๊ฑฐ L๊ฐ๋ฅผ ์ง๋ ์ ์๋ ๊ฒฝ์ฐ
์ด๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผํ ์ ์ ๋ด๋ฆฌ๋ง๊ธธ์์ ๊ฐ์๊ฑฐ L๊ฐ๋ฅผ ์ง๋ ์ ์์ ๋
- ์ขํ๋ฅผ last ๊ฐ ๊ธฐ์ค์ผ๋ก ๋ง์ถฐ์ค์ผ ํ๊ณ (for๋ฌธ์ ์๋ก ๋๊ฒ ๋๋ฉด last๋ map[i][j+L]์ด ๋๋ค.)
- ๊ฒฝ์ฌ๋ฉด์ ์์ ์ฒ์๋ถํฐ ๋ค์ ์์ํด์ผํ๋ฏ๋ก cnt๋ 1์ด ์๋๋ผ 0์ผ๋ก ์ด๊ธฐํํด์ผ ํ๋ค.
3. ์ฝ๋
import java.io.*;
import java.util.*;
public class Main {
static int map1[][], map2[][], N, L, ans;
static boolean isDown;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer 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++) {
int num = Integer.parseInt(st.nextToken());
map1[i][j] = num;
map2[j][i] = num;
}
}
// ์
๋ ฅ ๋
solution(map1);
solution(map2);
System.out.println(ans);
}
static void solution(int[][] map) {
for (int i=0; i<N; i++) {
int cnt = 1;
boolean isOk = true;
for (int j=0; j<N-1; j++) {
int last = map[i][j];
int now = map[i][j+1];
int gap = Math.abs(now-last);
if (gap == 0) {
cnt++;
}
else if (gap == 1) {
if (now > last) { //์ค๋ฅด๋ง๊ธธ
if (cnt >= L) {
cnt = 1;
continue;
}
else {
isOk = false;
break;
}
}
else if (now < last) { //๋ด๋ฆฌ๋ง๊ธธ
if (j+L >= N ) {
isOk = false;
break;
}
for (int k=1; k<=L; k++) {
if (map[i][j+k] != now) {
isOk = false;
break;
}
}
if (!isOk) break;
cnt = 0; //์ฃผ์์ 1) 0์ธ ์ด์ : ๊ฒฝ์ฌ๋ก ์์ ์ฒ์๋ถํฐ ๋ค์ ์์ํด์ผ ํจ
j += L-1; //์ฃผ์์ 2) L-1์ธ ์ด์ : j๋ last ์ขํ๋ก ๋ง์ถฐ์ผ ํจ
}
}
else if (gap >= 2){
isOk = false;
break;
}
}
if (isOk) {
ans++;
}
}
}
}
4. ์ฌ๋ด
์ดํ ์ ๋ ๊ฑธ๋ ธ์ผ๋ ์กฐ๊ฑด์ด ๊น๋ค๋ก์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์๋ค. ๋ถํ๋ค ๊ผญ ๋ค์ ํ๋ฌ์์ค๊ฒ..
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 14889 ์คํํธ์ ๋งํฌ - Java (0) | 2023.10.19 |
---|---|
[BOJ] 14888 ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ - Java (0) | 2023.10.19 |
[BOJ] 14500 ํ ํธ๋ก๋ฏธ๋ ธ - Java (1) | 2023.10.18 |
[BOJ] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ - Java (1) | 2023.10.17 |
[BOJ] 21610 ๋ง๋ฒ์ฌ ์์ด์ ๋น๋ฐ๋ผ๊ธฐ - Java (0) | 2023.10.14 |