https://www.acmicpc.net/problem/14890
14890๋ฒ: ๊ฒฝ์ฌ๋ก
์ฒซ์งธ ์ค์ N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ์นธ์ ๋์ด๋ 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
www.acmicpc.net
๋ชจ๋ ํ์ ๋ํด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํํ๋ฉฐ ์ง๋๊ฐ ์ ์๋ ๊ธธ์ธ์ง ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์๋ค.
โ ์ผ์ชฝ ๋ธ๋ญ๊ณผ์ ๋์ด ์ฐจ์ด(gap) ๊ณ์ฐ
- gap == 0 : ๋ค์ ์นธ์ผ๋ก ์ฌ๊ท
- gap == 1 : ์ผ์ชฝ ๋ธ๋ญ์ ๊ณ๋จ์ ๋์ ์ ์๋์ง ํ์ธํ ํ ๋ค์ ์นธ์ผ๋ก ์ฌ๊ท
- gap == -1 : ์ด๋ฉด ์ค๋ฅธ์ชฝ ๋ธ๋ญ์ ๊ณ๋จ์ ๋์ ์ ์๋์ง ํ์ธํ ํ ๊ณ๋จ ์ดํ ์นธ์ผ๋ก ์ฌ๊ท
โ ๋ฐฑํธ๋ํน ์ข ๋ฃ(basecase) ์กฐ๊ฑด
- ๊ณ๋จ์ ๋ง์ง๋ง ๋ธ๋ญ์ ๋ฑ ๋ง๊ฒ ๋๊ณ , ์ฌ๊ทํจ์๋ฅผ ํ ๊ฒฝ์ฐ : ์ง๋๊ฐ ์ ์๋ ๊ธธ ์ด๋ฏ๋ก ans+=1
- ํ์ฌ ํ์ ์์น๊ฐ ๋ง์ง๋ง ๋ธ๋ญ์ธ ๊ฒฝ์ฐ
- gap == 0 : ์ง๋๊ฐ ์ ์๋ ๊ธธ ์ด๋ฏ๋ก ans+=1
- gap == 1 : ์ผ์ชฝ ๋ธ๋ญ์ ๊ณ๋จ์ ๋์ ์ ์์ผ๋ฉด ans+=1
- gap == -1 : ๊ณ๋จ์ ๊ธธ์ด๊ฐ 1์ด๋ฉด ans+=1
์ฝ๋ ๊ตฌํ
๐ก์ผ์ชฝ ๋ธ๋ญ์ ๊ณ๋จ์ ๋์ ์ฌ๋ถ์ ์๋ฆฌ๊ฐ ์๋์ง ํ์ธํ๊ธฐ ์ํด ํจ์์ ๋งค๊ฐ๋ณ์ cnt๋ฅผ ํ์ฉํ๋ค.
static void check(int[][] array,int row,int col,int cnt){
}
cnt : ํ์ฌ ์์น col์์ ๊ณ๋จ์ ๋์ ์ ์๋ ๊ธธ์ด๋ฅผ ๋ปํ๋ค.
gap == 0 : ๊ณ๋จ์ ๋์ ์ ์๋ ๊ธธ์ด๊ฐ 1 ์ฆ๊ฐ ํ๋ฏ๋ก check(array,row,col+1,cnt+1)
gap == 1 : col+1 ์์น์์ ๊ณ๋จ์ ๋์ ์ ์๋ ๊ธธ์ด๋ 1์ด๋ฏ๋ก check(array,row,col+1,1)
gap == -1 : col+L ์์น์์ ๊ณ๋จ์ ๋์ ์ ์๋ ๊ธธ์ด๋ 0์ด๋ฏ๋ก check(array,row,col+L,0)
์ ์ฒด์ฝ๋
package com.mincheolsong;
import java.io.*;
import java.util.*;
public class Main {
static int N,L;
static int[][] arr;
static int ans;
static void check(int[][] array,int row,int col,int cnt){ // cnt : ๊ณ๋จ์ ๋์ ์ ์๋ ๋ธ๋ญ์ ํฌ๊ธฐ
if(col==N){ // ๊ณ๋จ์ ๋ง์ง๋ง ๋ธ๋ญ์ ๋ฑ ๋ง๊ฒ ๋๊ณ , ์ฌ๊ท ํจ์๋ฅผ ํ ๊ฒฝ์ฐ
ans+=1;
return;
}
int gap; // ์ด์ ๋ธ๋ญ๊ณผ ๋์ด ์ฐจ์ด
if(col-1<0){ // ํจ์ ์์ ์
๋ ฅ์ธ ๊ฒฝ์ฐ gap=0
gap = 0;
}else{
gap = array[row][col] - array[row][col-1]; // ์ด์ ๋ธ๋ญ๊ณผ ๋์ด ์ฐจ์ด
}
if(col==N-1){ // ํ์ฌ ํ์ ์์น๊ฐ ๋ง์ง๋ง ๋ธ๋ญ์ธ ๊ฒฝ์ฐ
if(gap==0){ // ๋์ด ์ฐจ๊ฐ ์๋ ๊ฒฝ์ฐ
ans+=1;
}
else if(gap==1 && cnt>=L){ // ํ์ฌ ๋ธ๋ญ์ด 1๋งํผ ๋์ด ์๊ณ , ๊ณ๋จ์ ๋์ ์ฌ๋ถ์ ๊ธธ์ด๊ฐ ์์ผ๋ฉด
ans+=1;
}
else if(gap==-1 && L==1){ // ํ์ฌ ๋ธ๋ญ์ด 1๋งํผ ๋ฎ๊ฒ ์๊ณ , ๊ณ๋จ์ ๊ธธ์ด๊ฐ 1์ธ ๊ฒฝ์ฐ
ans+=1;
}
return;
}
if(gap==0){ // ๋์ด ์ฐจ๊ฐ ์์ผ๋ฉด
check(array,row,col+1,cnt+1); // ๋ค์ ๋ธ๋ญ์ผ๋ก ์ฌ๊ท
}else if(gap==1){ // 1๋งํผ ํฌ๋ฉด
if(cnt>=L){ // ๊ณ๋จ์ ๋์ ์ฌ๋ถ์ ๊ธธ์ด๊ฐ ์์ผ๋ฉด
check(array,row,col+1,1); // cnt๊ฐ 1์ธ ์ด์ = col+1 ์์น์์ ๊ณ๋จ์ ๋์ ์ ์๋ ํฌ๊ธฐ๊ฐ 1์ด๊ธฐ ๋๋ฌธ
}
}else if(gap==-1){ // 1๋งํผ ์์ผ๋ฉด
int temp = 0;
for(int c=col;c<N;c++){ // ๊ณ๋จ์ ๋์ ์ ์๋์ง ๊ธธ์ด ์ฒดํฌ
if(array[row][c]==array[row][col]){
if(++temp==L) break;
}else{
break;
}
}
if(temp==L){ // ๊ณ๋จ์ ๋์ ์ ์์ผ๋ฉด
check(array,row,col+L,0); // cnt๊ฐ 0์ธ ์ด์ = col+L ์์น์์ ์ง์ ๋ธ๋ญ์๋ ๊ณ๋จ์ ๋์ ์ ์๊ธฐ ๋๋ฌธ
}
}
}
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());
arr = new int[N][N];
ans = 0;
for(int i=0;i<N;i++){
st = new StringTokenizer(br.readLine());
for(int j=0;j<N;j++){
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int r=0;r<N;r++){
check(arr,r,0,0);
}
System.out.println(ans);
// ๋ฐฐ์ด 90๋ ํ์ ์ํค๊ธฐ
int[][] tmp = new int[N][N];
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
tmp[i][j] = arr[N-1-j][i];
}
}
for(int r=0;r<N;r++){
check(tmp,r,0 ,0);
}
for(int r=0;r<N;r++){
System.out.println(Arrays.toString(tmp[r]));
}
System.out.println(ans);
}
}
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DFS + DP (๋ฐฑ์ค 1520 ๋ด๋ฆฌ๋ง๊ธธ) (0) | 2024.02.20 |
---|---|
๊ตฌํ, ๋ฐฑํธ๋ํน (15684 ์ฌ๋ค๋ฆฌ ์กฐ์) (0) | 2024.02.16 |
BFS (๋ฐฑ์ค 16234 ์ธ๊ตฌ์ด๋) (1) | 2024.02.09 |
๋ ์ง์ ์ด ๋์์, ๋ฒฝ์ ๋ฟ๊ธฐ ์ ๊น์ง ์์ง์ด๋ bfs (๋ฐฑ์ค 13460 ๊ตฌ์ฌํ์ถ2) (1) | 2024.01.21 |
๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ (0) | 2024.01.12 |