diff --git "a/baekjoon/11967_\353\266\210\354\274\234\352\270\260/src/Main.java" "b/baekjoon/11967_\353\266\210\354\274\234\352\270\260/src/Main.java" new file mode 100644 index 0000000..bb7f316 --- /dev/null +++ "b/baekjoon/11967_\353\266\210\354\274\234\352\270\260/src/Main.java" @@ -0,0 +1,114 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.*; + +// 점점 어려워지는 bfs.. +public class Main { + static int n, m, result; + static int[] dx = { -1, 0, 1, 0 }; + static int[] dy = { 0, 1, 0, -1 }; + static boolean[][] visited; + static boolean[][] light; + + static List list = new ArrayList<>(); + + public static void main(String[] args) throws IOException { + StringBuilder sb = new StringBuilder(); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st = new StringTokenizer(br.readLine()); + n = Integer.parseInt(st.nextToken()); + m = Integer.parseInt(st.nextToken()); + visited = new boolean[n + 1][n + 1]; + light = new boolean[n + 1][n + 1]; + for (int i = 0; i < m; i++) { + st = new StringTokenizer(br.readLine()); + list.add(new Info(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), + Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()))); + } + + bfs(1, 1); + + System.out.println(result + 1); // (1,1) 켜진상태 더해주기 + } + + static void bfs(int sx, int sy) { + + Queue q = new LinkedList<>(); + + q.add(new Room(sx, sy)); + + while (!q.isEmpty()) { + + Room poll = q.poll(); + + int curx = poll.x; + int cury = poll.y; + light[curx][cury] = true; + visited[curx][cury] = true; + + // 불 정보담긴 리스트 돌면서 불 키기 + listLoop: for (int j = 0; j < list.size(); j++) { + int toX = list.get(j).toX; // 불킬 수 있는 좌표x + int toY = list.get(j).toY; // 불킬 수 있는 좌표y + + // 현재위치에서 켜지는 불먼저 키기 + if(curx == list.get(j).fromX && cury == list.get(j).fromY) { + if (!light[toX][toY]) { + light[toX][toY] = true; + result++; + for (int k = 0; k < 4; k++) { + int lightNearX = toX + dx[k]; + int lightNearY = toY + dy[k]; + if (lightNearX <= 0 || lightNearY <= 0 || lightNearX > n || lightNearY > n) continue; + if (visited[lightNearX][lightNearY]) { // 불을 킨 방의 주변이 왔던길이면 + q.add(new Room(toX, toY)); // 큐에 넣기 + list.remove(j--); //리스트에서 삭제 + continue listLoop; + } + } + } + } + } + // 4방 탐색 + for (int i = 0; i < 4; i++) { + int nx = curx + dx[i]; + int ny = cury + dy[i]; + + if (nx <= 0 || ny <= 0 || nx > n || ny > n) continue; + + if (visited[nx][ny] || !light[nx][ny]) { + continue; //갔던 길이거나 불이 안켜져있으면 못감 + } + q.add(new Room(nx, ny)); //갈수있는길이면 큐에 담기 + visited[nx][ny] = true; + + } + + } + } +} + +class Info { + int fromX; + int fromY; + int toX; + int toY; + + public Info(int fromX, int fromY, int toX, int toY) { + this.fromX = fromX; + this.fromY = fromY; + this.toX = toX; + this.toY = toY; + } +} + +class Room { + int x; + int y; + + public Room(int x, int y) { + this.x = x; + this.y = y; + } +} diff --git "a/baekjoon/14908_\352\265\254\353\221\220\354\210\230\354\204\240\352\263\265/src/Minju.java" "b/baekjoon/14908_\352\265\254\353\221\220\354\210\230\354\204\240\352\263\265/src/Minju.java" new file mode 100644 index 0000000..24f0bca --- /dev/null +++ "b/baekjoon/14908_\352\265\254\353\221\220\354\210\230\354\204\240\352\263\265/src/Minju.java" @@ -0,0 +1,52 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.StringTokenizer; + +public class Minju { + public static void main(String[] args) throws IOException { + StringBuilder sb= new StringBuilder(); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + + WorkTime[] workTimes = new WorkTime[N]; + StringTokenizer st = null; + for(int i =0;i{ + int idx; + int day; + int pay; + + public WorkTime(int idx, int day, int pay) { + this.idx = idx; + this.day = day; + this.pay = pay; + } + + @Override + public int compareTo(WorkTime o) { + double divThis = (double)this.day / this.pay; + double divOther = (double)o.day / o.pay; + + if(divThis == divOther){ + return this.idx - o.idx; + }else if (divThis > divOther){ + return 1; + }else return -1; + + } +} \ No newline at end of file diff --git "a/baekjoon/2904_\354\210\230\355\225\231\354\235\200\353\204\210\353\254\264\354\211\254\354\233\214/src/Minju.java" "b/baekjoon/2904_\354\210\230\355\225\231\354\235\200\353\204\210\353\254\264\354\211\254\354\233\214/src/Minju.java" new file mode 100644 index 0000000..bd1bb45 --- /dev/null +++ "b/baekjoon/2904_\354\210\230\355\225\231\354\235\200\353\204\210\353\254\264\354\211\254\354\233\214/src/Minju.java" @@ -0,0 +1,92 @@ +package test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +public class Main { + // 소인수분해해서 다 똑같이 나눠가질수있는만큼 나눠가지기 + // 그 공통값이 gcd + // 각 숫자별로 부족한 개수만큼만 세주면 움직이는 횟수(남은 애들은 부족한거 채울 때 교환되니까) + // 999499 소수임 + static int[] total; // 소수리스트랑 연결되며 애들이 차례로 카운트 되어 있음 + static boolean[] primeVisit = new boolean[1000001]; // 소수 + static int[][] numDiv; // 각 숫자마다의 소인수분해 배열 저장 + static int[] num; // 원래입력받는배열 + static List prime = new ArrayList(); // prime + static int primeSize; + + public static void main(String[] args) throws IOException, NumberFormatException { + StringBuilder sb = new StringBuilder(); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + num = new int[N]; + era(); // 에라토스테네스의체 + numDiv = new int[101][primeSize]; + total = new int[primeSize]; + StringTokenizer st = new StringTokenizer(br.readLine()); + for (int i = 0; i < N; i++) { + num[i] = Integer.parseInt(st.nextToken()); + if (num[i] != 1) div(num[i], i); + } + int moveCnt = 0; // 출력값 + // 공통 GCD + int gcd = 1; + int cur = 0; + for (int i = 0; i < prime.size(); i++) { + // if(!prime[i]) continue; + + if (total[i] > 0) { + cur = prime.get(i); + gcd *= (Math.pow(cur, (total[i] / N))); // 출력할 gcd + total[i] /= N; // n만큼 나눠주기 + } + + // 이동 횟수 구하기 + if (total[i] > 0) { + for (int j = 0; j < N; j++) { + if (total[i] > numDiv[j][i]) { // 부족하다면 + moveCnt += (total[i] - numDiv[j][i]); // 부족한 개수만큼 이동 + } + } + } + + } + + System.out.println(gcd + " " + moveCnt); + + } + + private static void div(int n, int k) { // 소인수분해 + for (int i = 0; i < prime.size(); i++) { + int cur = prime.get(i); + while (n % cur == 0) { + n /= cur; + total[i]++; + numDiv[k][i]++; + } + if (n == 1) + break; + } + + } + + private static void era() { + + for (int i = 2; i < 1000000; i++) { + if (!primeVisit[i]) { + prime.add(i); + for (int j = i; j < 1000000; j += i) { + primeVisit[j] = true; + } + } + } + + primeSize = prime.size(); + + } + +} \ No newline at end of file