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
70 changes: 70 additions & 0 deletions 0326/basic_B2457_공주님의_정원/Jaemin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import java.io.*;
import java.util.*;

public class Jaemin {
static class Node implements Comparable<Node>{
int start, end;
Node(int start, int end){
this.start = start;
this.end = end;
}
@Override
public int compareTo(Node o) {
if(this.start != o.start) return Integer.compare(this.start, o.start);
return Integer.compare(o.end, this.end);
}
}

static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

public static void main(String[] args) throws NumberFormatException, IOException {
int N = Integer.parseInt(br.readLine());

Node[] nodes = new Node[N];
for(int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int sm = Integer.parseInt(st.nextToken());
int sd = Integer.parseInt(st.nextToken());
int em = Integer.parseInt(st.nextToken());
int ed = Integer.parseInt(st.nextToken());

int startday = sm*100 + sd;
int endday = em*100 + ed;
nodes[i] = new Node(startday, endday);
}

Arrays.sort(nodes);

int cnt = 0;
int tail = 301;
int temptail = tail;
int idx = 0;
while(tail < 1201) {
boolean found = false;
while(idx < N && nodes[idx].start <= tail) {
if(nodes[idx].end > temptail) {
temptail = nodes[idx].end;
found = true;
}
idx++;
}

if(found) {
tail = temptail;
cnt++;
} else {
break;
}
}

if(tail <= 1130) {
cnt = 0;
}

bw.write(cnt + "\n");
bw.flush();
bw.close();
br.close();
}
}
76 changes: 76 additions & 0 deletions 0326/expert_P3_자물쇠와_열쇠/Jaemin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
class Jaemin {
static final int[] dr = {-1, 1, 0, 0};
static final int[] dc = {0, 0, -1, 1};

static int N, M;

public boolean solution(int[][] key , int[][] lock){
N = key.length;
M = lock.length;
int[][] turnKey = key;
for(int a = 0; a < 4; a++){

for(int i = 1 -N; i < M ; i++){
for(int j = 1 -N; j < M; j++){
int[][] checkLock = new int[M][M];
for(int l = 0; l < M; l++){
System.arraycopy(lock[l], 0, checkLock[l], 0, M);
}

if(check(turnKey, checkLock, i , j)) return true;
}
}
turnKey = turn(turnKey);
}


return false;
}

static boolean check(int[][] key, int[][] lock, int sr, int sc){
for (int i = 0; i < N; i++) {
for(int j = 0; j < N; j++){
int lr = sr + i;
int lc = sc + j;
if(lr >= 0 && lr < M && lc >= 0 && lc < M ){
lock[lr][lc] += key[i][j];
}
}
}

for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
if(lock[i][j] != 1) return false;
}
}


return true;
}


static int[][] move(int d, int[][] key){
int[][] temp = new int[N][N];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
int nr = i + dr[d];
int nc = j + dc[d];
if(nr >= 0 && nr < N && nc >= 0 && nc < N){
temp[i][j] = key[nr][nc];
}
}

}
return temp;
}

static int[][] turn (int[][] key){
int[][] temp = new int[N][N];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
temp[j][N -1 -i] = key[i][j];
}
}
return temp;
}
}
101 changes: 101 additions & 0 deletions 0326/mid_B16234_인구_이동/Jaemin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import java.io.*;
import java.util.*;

class Node{
int r, c;
Node(int r, int c){
this.r = r;
this.c = c;
}
}

public class Jaemin {
static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static final StringBuilder sb = new StringBuilder();
static final int[] dr = {-1, 1, 0, 0};
static final int[] dc = {0, 0, -1, 1};

static int N, L, R, map[][], answer;
static boolean[][] visited;

public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
L = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());

map = new int[N][N];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < N; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int days = 0;

boolean isMoved;
do {
isMoved = false;
visited = new boolean[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(visited[i][j])continue;
if(tryMove(i, j)) isMoved=true;
}
}
if(isMoved)days++;
}while(isMoved);

sb.append(days).append("\n");
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();

}

static boolean tryMove(int r, int c) {
int sum = 0;

Deque<Node> dq = new ArrayDeque<>();
Deque<Node> union = new ArrayDeque<>();

dq.add(new Node(r, c));
visited[r][c]= true;

while(!dq.isEmpty()) {
Node node = dq.pollFirst();
int cr = node.r;
int cc = node.c;

sum+= map[cr][cc];
union.addFirst(new Node(cr , cc));

for(int d = 0; d < 4; d++) {
int nr = cr + dr[d];
int nc = cc + dc[d];
if(nr >= 0 && nr < N && nc >= 0 && nc < N && !visited[nr][nc]) {
int diff = Math.abs(map[cr][cc] - map[nr][nc]);

if(diff >= L && diff <= R) {
dq.add(new Node(nr, nc));
visited[nr][nc] = true;
}
}
}
}

if(union.size() > 1) {
int size = union.size();
int div = sum / size;
while(!union.isEmpty()) {
Node node = union.pollFirst();
map[node.r][node.c] = div;
}
return true;
}
return false;
}

}