https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5VwAr6APYDFAWu
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
import java.util.*;
import java.io.*;
public class Solution
{
static int T, N;
static int[][] map;
static int sX, sY;
static int ans;
static boolean[][] visited;
static int[] dx = {1,1,-1,-1};
static int[] dy = {-1,1,1,-1};
static HashSet<Integer> desert;
static void start(int x, int y, int dir){
for(int d=dir;d<4;d++){
int nx = x+dx[d];
int ny = y+dy[d];
if(!isIn(nx,ny)) continue;
if(nx==sX&&ny==sY&&desert.size()>=3) {
ans = Math.max(ans,desert.size());
return;
}
if(!desert.contains(map[nx][ny])&&!visited[nx][ny]){
desert.add(map[nx][ny]);
visited[nx][ny]=true;
start(nx,ny,d);
visited[nx][ny]=false;
desert.remove(map[nx][ny]);
}
}
}
static boolean isIn(int x, int y){
if(x<0||x>=N||y<0||y>=N) return false;
return true;
}
static void init(){
desert.clear();
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
visited[i][j] = false;
}
}
}
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
T = Integer.parseInt(br.readLine());
for(int tc=1;tc<=T;tc++){
N = Integer.parseInt(br.readLine().trim());
map = new int[N][N];
visited = new boolean[N][N];
desert = new HashSet<>();
ans = -1;
for(int i=0;i<N;i++){
st = new StringTokenizer(br.readLine().trim());
for(int j=0;j<N;j++){
map[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
sX = i;
sY = j;
init();
desert.add(map[i][j]);
visited[i][j]=true;
start(i,j,0);
desert.remove(map[i][j]);
visited[i][j]=false;
}
}
System.out.println("#"+tc+" "+ans);
}
}
}
사각형 만들려면 이전 방향을 같이 넘겨주면서 그 방향 이상의 방향으로만 가게하면 됨
중복 안되기 때문에 set 사용해서 중복 제거
세번이상 방문한 뒤 처음 위치로 돌아오면 사각형 완성 -> set 길이 구해서 최댓값 갱신
'알고리즘' 카테고리의 다른 글
[백준] BOJ2075 - N번째 큰 수 (JAVA) (0) | 2023.04.11 |
---|---|
슬라이딩 윈도우 / 투 포인터 (JAVA) (1) | 2023.04.11 |
[SWEA] SWEA 5644 - 무선 충전 (JAVA) (0) | 2023.04.06 |
[SWEA] SWEA5658 - 보물상자 비밀번호 (JAVA) (0) | 2023.04.03 |
[PGS] 프로그래머스 - N개의 최소공배수 (JAVA) (0) | 2023.03.28 |