Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 114 additions & 0 deletions baekjoon/11967_불켜기/src/Main.java
Original file line number Diff line number Diff line change
@@ -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<Info> 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<Room> 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;
}
}
52 changes: 52 additions & 0 deletions baekjoon/14908_구두수선공/src/Minju.java
Original file line number Diff line number Diff line change
@@ -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<N;i++){
st = new StringTokenizer(br.readLine());
workTimes[i] = new WorkTime(i+1, Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()));
}
Arrays.sort(workTimes);

for(WorkTime wt : workTimes){
sb.append(wt.idx + " ");
}
System.out.println(sb);
}

}

class WorkTime implements Comparable<WorkTime>{
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;

}
}
92 changes: 92 additions & 0 deletions baekjoon/2904_수학은너무쉬워/src/Minju.java
Original file line number Diff line number Diff line change
@@ -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<Integer> prime = new ArrayList<Integer>(); // 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();

}

}