๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[BOJ] 14890 ๊ฒฝ์‚ฌ๋กœ - Java

category Algorithm/BOJ 2023. 10. 24. 22:45

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. ์‚ฌ๋‹ด

์ดํ‹€ ์ •๋„ ๊ฑธ๋ ธ์œผ๋‚˜ ์กฐ๊ฑด์ด ๊นŒ๋‹ค๋กœ์›Œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๋‹ค. ๋ถ„ํ•˜๋‹ค ๊ผญ ๋‹ค์‹œ ํ’€๋Ÿฌ์™€์ค„๊ฒŒ..