문제
https://level.goorm.io/exam/195695/%EB%B0%9C%EC%A0%84%EA%B8%B0-2/quiz/1
구름LEVEL
난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.
level.goorm.io
코드
import java.io.*;
import java.util.*;
class Main {
static int building [] = new int [33];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int board [][] = new int [1000][1000];
for(int i=0;i<n;i++){
st = new StringTokenizer(br.readLine());
for(int j=0;j<n;j++){
board[i][j] = Integer.parseInt(st.nextToken());
}
}
bfs(n, k, board);
int max = 0;
int idx = 0;
for(int i=0;i<31;i++){
if(max <= building[i]) {
max = building[i];
idx = i;
}
}
System.out.println(idx);
}
static void bfs(int n, int k, int board[][]){
int dx [] = {0, 1, 0, -1};
int dy [] = {1, 0, -1, 0};
boolean visited [][] = new boolean [1000][1000];
Queue<int []> que = new LinkedList<>();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(visited[i][j]) continue;
que.add(new int [] {i, j});
visited[i][j] = true;
int cnt = 1;
int brd = board[i][j];
while(!que.isEmpty()){
int [] point = que.poll();
for(int t=0;t<4;t++){
int nx = point[0] + dx[t];
int ny = point[1] + dy[t];
if(nx < 0 || ny < 0 || nx >= n || ny >= n) continue;
if( visited[nx][ny] || board[i][j] != board[nx][ny] ) continue;
visited[nx][ny] = true;
que.add(new int [] {nx, ny});
cnt++;
}
}
if(cnt >= k) building[brd]++;
}
}
}
}
문제
https://level.goorm.io/exam/195695/%EB%B0%9C%EC%A0%84%EA%B8%B0-2/quiz/1
구름LEVEL
난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.
level.goorm.io
코드
import java.io.*; import java.util.*; class Main { static int building [] = new int [33]; public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int k = Integer.parseInt(st.nextToken()); int board [][] = new int [1000][1000]; for(int i=0;i<n;i++){ st = new StringTokenizer(br.readLine()); for(int j=0;j<n;j++){ board[i][j] = Integer.parseInt(st.nextToken()); } } bfs(n, k, board); int max = 0; int idx = 0; for(int i=0;i<31;i++){ if(max <= building[i]) { max = building[i]; idx = i; } } System.out.println(idx); } static void bfs(int n, int k, int board[][]){ int dx [] = {0, 1, 0, -1}; int dy [] = {1, 0, -1, 0}; boolean visited [][] = new boolean [1000][1000]; Queue<int []> que = new LinkedList<>(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(visited[i][j]) continue; que.add(new int [] {i, j}); visited[i][j] = true; int cnt = 1; int brd = board[i][j]; while(!que.isEmpty()){ int [] point = que.poll(); for(int t=0;t<4;t++){ int nx = point[0] + dx[t]; int ny = point[1] + dy[t]; if(nx < 0 || ny < 0 || nx >= n || ny >= n) continue; if( visited[nx][ny] || board[i][j] != board[nx][ny] ) continue; visited[nx][ny] = true; que.add(new int [] {nx, ny}); cnt++; } } if(cnt >= k) building[brd]++; } } } }