diff --git a/210902/BOJ_1325.cpp b/210902/BOJ_1325.cpp new file mode 100644 index 0000000..69902db --- /dev/null +++ b/210902/BOJ_1325.cpp @@ -0,0 +1,68 @@ +#include +#define xx first +#define yy second +using namespace std; +using ll = long long; +using pii = pair; +using pll = pair; +using tpi = tuple; +using tpl = tuple; +using dpi = pair; +using dpl = pair; +using pis = pair; +using psi = pair; + +const int INF = 0x3f3f3f3f; +const ll INF64 = 0x3f3f3f3f3f3f3f3f; + +int N,M; +vector adj[10001]{}; +bool vi[10001]{}; +vector arr; + +int bfs(int st){ + memset(vi,0,sizeof(vi)); + queue q; + q.push(st); + vi[st] = true; + + int ret = 1; + while (!q.empty()) { + int cn = q.front(); + q.pop(); + + for(auto next : adj[cn]){ + if(vi[next]) continue; + q.push(next); + vi[next] = true; + ret++; + } + } + return ret; +} + +int main() { + ios_base::sync_with_stdio(0); + cin.tie(0); + cin>>N>>M; + int a,b; + for(int i=0; i>a>>b; + adj[b].push_back(a); + } + + for(int i=1; i<=N; i++) arr.push_back({bfs(i), i}); + + sort(arr.begin(), arr.end(), [&](pii a, pii b) -> bool{ + if(a.xx == b.xx) return a.yy < b.yy; + return a.xx > b.xx; + }); + + int pre = -1; + for(auto val : arr){ + if(pre!=-1 && pre!=val.xx) break; + pre = val.xx; + cout<> adj; // 바이러스 1~K 의 위치 저장 + static int dy[] = {-1,1,0,0}; + static int dx[] = {0,0,-1,1}; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력 + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력 + StringTokenizer st = new StringTokenizer(br.readLine());; + + N = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + + m = new int[N][N]; + vi = new boolean[N][N]; + adj = new ArrayList<>(); + for(int i=0; i<=K; i++) adj.add(new ArrayList<>()); + for(int i=0; i q = new ArrayDeque<>(); + for(int i=1; i<=K; i++){ + for (Tiii next : adj.get(i)) { // 1번 바이러스들 부터 큐에 순차적으로 저장 + q.add(next); + vi[next.y][next.x] = true; // 방문처리 + } + } + + while(!q.isEmpty()){ + Tiii poll = q.poll(); + int cy = poll.y; + int cx = poll.x; + int cd = poll.d; + + if(cd == S) continue; // S초일때 답을 구해야 하므로 S초라면 증식 중지 + + for(int i=0; i<4; i++){ + int ny = cy + dy[i]; + int nx = cx + dx[i]; + if(ny<0 || nx<0 || ny>=N || nx>=N || vi[ny][nx] || m[ny][nx]!=0) continue; + q.add(new Tiii(ny,nx,cd+1)); // 증식할 수 있으면, 다음 y축과 x좌표 그리고 현재 지난시간(초)를 큐에 저장 + vi[ny][nx] = true; + m[ny][nx] = m[cy][cx]; // 다음 위치에 바이러스 번호 업데이트 + } + } + } + + static class Tiii{ // y축, x축, 지난 시간(초) + int y,x,d; + + public Tiii(int y, int x, int d) { + this.y = y; + this.x = x; + this.d = d; + } + } + +} diff --git a/210902/BOJ_6188.java b/210902/BOJ_6188.java new file mode 100644 index 0000000..f3a1fec --- /dev/null +++ b/210902/BOJ_6188.java @@ -0,0 +1,84 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Queue; +import java.util.StringTokenizer; + +public class Main{ + static int N, M; + static ArrayList> adj; + static int[] vi; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력 + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력 + StringTokenizer st = new StringTokenizer(br.readLine());; + + N = Integer.parseInt(st.nextToken()); + M = Integer.parseInt(st.nextToken()); + + vi = new int[N+1]; + Arrays.fill(vi, -1); + adj = new ArrayList<>(); + for(int i=0; i<=N; i++) adj.add(new ArrayList<>()); + + int a,b; + for(int i=0; i q = new ArrayDeque<>(); + q.add(new Pii(1,0)); + vi[1] = 0; + + int dist = 0; + while (!q.isEmpty()) { + Pii poll = q.poll(); + int cn = poll.n; + int cd = poll.d; + dist = Math.max(dist, cd); + + for (Integer next : adj.get(cn)) { + if(vi[next]>=0) continue; + q.add(new Pii(next, cd+1)); + vi[next] = cd+1; + } + } + return dist; + } + + static class Pii{ + int n,d; + + public Pii(int n, int d) { + this.n = n; + this.d = d; + } + } + +} diff --git a/210902/BOJ_7576.java b/210902/BOJ_7576.java new file mode 100644 index 0000000..45d8010 --- /dev/null +++ b/210902/BOJ_7576.java @@ -0,0 +1,84 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.ArrayDeque; +import java.util.Queue; +import java.util.StringTokenizer; + +public class Main{ + static int N, M; + static int[][] m; + static boolean[][] vi; + static int dy[] = {-1,1,0,0}; + static int dx[] = {0,0,-1,1}; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 입력 + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 출력 + StringTokenizer st = new StringTokenizer(br.readLine());; + + M = Integer.parseInt(st.nextToken()); + N = Integer.parseInt(st.nextToken()); + + Queue q = new ArrayDeque<>(); + m = new int[N][M]; + vi = new boolean[N][M]; + for(int i=0; i=N || nx>=M || vi[ny][nx] || m[ny][nx]==-1) continue; + q.add(new Tiii(cd + 1, ny, nx)); + vi[ny][nx] = true; + } + } + + int res = ans; + for(int i=0; i