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
158 changes: 158 additions & 0 deletions 조다연/Week26_0926/BOJ_20058.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class BOJ_20058 {
//������ ���� ���̾��
static int N, Q;
static int[][] map, tmp;
static int answer1, answer2;
static int[] dr = {-1, 1, 0, 0};
static int[] dc = {0, 0, -1, 1};
static boolean[][] v;
static boolean[][] melt;

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

N = Integer.parseInt(st.nextToken());
Q = Integer.parseInt(st.nextToken());

int n = (int) Math.pow(2, N);
map = new int[n][n];
tmp = new int[n][n];

for(int r=0; r<n; r++) {
st = new StringTokenizer(br.readLine());
for(int c=0; c<n; c++) {
map[r][c] = Integer.parseInt(st.nextToken());
}
}

//�����ִ� ���� ��, ���� ū ��� �����ϴ� ĭ ����
answer1 = 0; answer2 = 0;

st = new StringTokenizer(br.readLine());
for(int i=0; i<Q; i++) {
int L = Integer.parseInt(st.nextToken());
int l = (int) Math.pow(2, L);

//90�� ȸ��
for(int r=0; r<n; r+=l) {
for(int c=0; c<n; c+=l) {
rotaion(r,c,l);
}
}

melt = new boolean[n][n];
//�����¿�� 3�� �̻� ������ ���������� ������ �ش�ĭ --
for(int r=0; r<n; r++) {
for(int c=0; c<n; c++) {
int cnt = ice(r,c);
if(cnt<3) melt[r][c] = true;
}
}

for(int r=0; r<n; r++) {
for(int c=0; c<n; c++) {
if(melt[r][c]) map[r][c]--;
if(map[r][c]<0) map[r][c] = 0;
}
}
}


//���� ū ���� ���
v = new boolean[n][n];
for(int r=0; r<n; r++) {
for(int c=0; c<n; c++) {
answer1+=map[r][c];
if(v[r][c] || map[r][c]==0) continue;
answer2 = Math.max(answer2, bfs(r,c));
}
}


System.out.println(answer1);
System.out.println(answer2);
}

private static int bfs(int r, int c) {
int cnt = 1;
Queue<int[]> q = new LinkedList<int[]>();
q.add(new int[] {r,c});
v[r][c] = true;

while(!q.isEmpty()) {
int[] now = q.poll();

int cr = now[0]; int cc = now[1];

for(int d=0; d<4; d++) {
int nr = cr+dr[d];
int nc = cc+dc[d];

if(nr<0 || nr>=map.length || nc<0 || nc>=map.length) continue;
if(v[nr][nc]) continue;

if(map[nr][nc]!=0) {
q.add(new int[] {nr,nc});
v[nr][nc] = true;
cnt++;
}
}
}

return cnt;
}

private static int ice(int r, int c) {
int cnt = 0;

for(int d=0; d<4; d++) {
int nr = r+dr[d];
int nc = c+dc[d];

//����
if(nr<0 || nr>=map.length || nc<0 || nc>=map.length) continue;

if(map[nr][nc]!=0) cnt++;
}


return cnt;
}

private static void rotaion(int r, int c, int l) {
int x=r; int y=c+l-1;
for(int i=r; i<r+l; i++) {
for(int j=c; j<c+l; j++) {
tmp[x][y] = map[i][j];
x++;
}
y--;
if(x>r+l-1) x=r;
if(y<c) y=c+l-1;
}

for(int i=r; i<r+l; i++) {
for(int j=c; j<c+l; j++) {
map[i][j] = tmp[i][j];
}
}
}

private static void print(int[][] map) {
for(int r=0; r<map.length; r++) {
for(int c=0; c<map[0].length; c++) {
System.out.print(map[r][c]+" ");
}
System.out.println();
}
}

}
53 changes: 53 additions & 0 deletions 조다연/Week26_0926/BOJ_27497.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package week26_0919;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;
import java.util.StringTokenizer;

public class BOJ_27497 {
//���ĺ� ����

public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Deque<Character> deque = new ArrayDeque<>();
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();

for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
int btn = Integer.parseInt(st.nextToken());

if(btn==3) { //���� ���߿� �߰��� ���� ����
if(!stack.isEmpty()) {
//���ڿ��� �� �ڿ� ���� ��찡 �ƴ� ����
//�� �տ� �ִ°� �� ������
if(stack.pop()==1) deque.pollLast();
else deque.pollFirst();
}
} else {
stack.push(btn);

//1 : ���ڿ� �� �ڿ� �߰�
//2 : ���ڿ� �� �տ� �߰�
if(btn==1) deque.addLast(st.nextToken().charAt(0));
else deque.addFirst(st.nextToken().charAt(0));
}
}

while(!deque.isEmpty()) {
sb.append(deque.poll());
}

//�ϼ��� ���ڿ� ���
//�ϼ��� ���ڿ��� �� ���ڿ��� ��� 0�� ���
System.out.println(sb.length()==0? 0 : sb);

}

}