์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- dfs
- ํ๋ก์ด๋์์
- ์ด์งํธ๋ฆฌ
- ๋นํธ๋ง์คํน
- Dijkstra
- ๋ถ๋ถ์งํฉ
- Union Find
- ์ด๋ถํ์
- ๋ค์ต์คํธ๋ผ
- ์กฐํฉ
- Floyd
- ๊ทธ๋ฆฌ๋
- ์นด์นด์ค
- ํฌํฌ์ธํฐ
- ์๋ฃ๊ตฌ์กฐ
- upperbound
- PriorityQueue
- ํธ๋ผ์ด
- ํ์๊ฐ์
- dp
- ๋ฐฑํธ๋ํน
- ๊ตฌํ
- Django
- ์ฐ์ ์์ํ
- BFS
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- LowerBound
- ์ฌ๊ท
- ์์ด
- ์๋ฎฌ๋ ์ด์
- Today
- Total
J
[JAVA] BOJ ๋ฐฑ์ค 20061 ๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ 2 ๋ณธ๋ฌธ
[JAVA] BOJ ๋ฐฑ์ค 20061 ๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ 2
snowball๐ฐ 2023. 3. 5. 16:12https://www.acmicpc.net/problem/20061
20061๋ฒ: ๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ 2
๋ชจ๋ ธ๋ฏธ๋ ธ๋๋ฏธ๋ ธ๋ ์๋์ ๊ฐ์ด ์๊ธด ๋ณด๋์์ ์งํ๋๋ ๊ฒ์์ด๋ค. ๋ณด๋๋ ๋นจ๊ฐ์ ๋ณด๋, ํ๋์ ๋ณด๋, ์ด๋ก์ ๋ณด๋๊ฐ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ถ์ด์๋ ํํ์ด๋ค. ๊ฒ์์์ ์ฌ์ฉํ๋ ์ขํ (x, y)์์ x๋ ํ,
www.acmicpc.net
์ ์ฒด ์ฝ๋
import java.io.*;
import java.util.*;
public class BOJ_20061 {
static int[][] map;
static int result;
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(bf.readLine());
map = new int[10][10];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
int t = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
block(t, x, y);
}
int cnt = 0;
for(int i=0; i<10; i++)
for(int j=0 ;j<10; j++)
if(map[i][j] == 1) cnt++;
System.out.println(result);
System.out.println(cnt);
}
static void block(int t, int x, int y) {
if(t == 1) {
// ํ๋์ ์์ญ
int j = 0;
for(j=4; j<=9; j++) {
if(map[x][j] == 0) continue;
break;
}
map[x][j-1] = 1;
// ์ด๋ก์ ์์ญ
int i=0;
for(i=4; i<=9; i++) {
if(map[i][y] == 0) continue;
break;
}
map[i-1][y] = 1;
}
else if(t == 2) {
// ํ๋์ ์์ญ
int j=0;
for(j=5; j<= 9; j++) {
if(map[x][j] == 0 && map[x][j-1] == 0) continue;
break;
}
map[x][j-1] = 1; map[x][j-2] = 1;
// ์ด๋ก์ ์์ญ
int i=0;
for(i=4; i<= 9; i++) {
if(map[i][y] == 0 && map[i][y+1] == 0) continue;
break;
}
map[i-1][y] = 1; map[i-1][y+1] = 1;
}
else if(t == 3) {
// ํ๋์ ์์ญ
int j=0;
for(j=4; j<=9; j++) {
if(map[x][j] == 0 && map[x+1][j] == 0)
continue;
break;
}
map[x][j-1] = 1; map[x+1][j-1] = 1;
// ์ด๋ก์ ์์ญ
int i=0;
for(i=5; i<= 9; i++) {
if(map[i][y] == 0 && map[i-1][y] == 0) continue;
break;
}
map[i-1][y] = 1; map[i-2][y] = 1;
}
score();
}
static void score() {
// ํ๋์ ์์ญ์์ ๊ฐ๋ ์ฐฌ ์ด ์ฐพ๊ธฐ
f: for(int j=6; j<=9; j++) {
for(int i=0; i<4; i++) {
if(map[i][j] == 0) continue f;
}
result++;
for(int k = j; k>=5; k--) {
for(int i=0; i<4; i++) {
map[i][k] = map[i][k-1];
}
}
for(int i=0; i<4; i++)
map[i][4] = 0;
}
// ์ด๋ก์ ์์ญ์์ ๊ฐ๋ ์ฐฌ ํ ์ฐพ๊ธฐ
f: for(int i=6; i<=9; i++) {
for(int j=0; j<4; j++) {
if(map[i][j] == 0) continue f;
}
result++;
for(int k = i; k>=5; k--) {
map[k] = map[k-1];
}
map[4] = new int[10];
}
// ์ฐํ์ ์์ญ์ ์นธ ๋น์ฐ๊ธฐ
// 1. ํ๋์
f: for(int j=4; j<=5; j++) {
boolean flag = false;
for(int i=0; i<4; i++) {
if(map[i][j] == 1) {flag = true; break;}
}
if(flag) {
for(int k = 9; k>j; k--) {
for(int i=0; i<4; i++) {
map[i][k] = map[i][k-1];
}
}
for(int i=0; i<4; i++)
map[i][j] = 0;
}
}
// 2. ์ด๋ก์
f: for(int i=4; i<=5; i++) {
boolean flag = false;
for(int j=0; j<4; j++) {
if(map[i][j] == 1) {flag = true; break;}
}
if(flag) {
for(int k = 9; k>i; k--) {
map[k] = map[k-1];
}
map[i] = new int[10];
}
}
}
}
block() ์ ์ ๋ ฅ๋ฐ์ ๋ธ๋ก์ ํ๋์ ์์ญ๊ณผ ์ด๋ก์ ์์ญ์ ๋์์ฃผ๋ ์ญํ ์ ํ๋ค.
score() ๋ ๊ฝ ์ฐฌ ํ๊ณผ ์ด์ ํ์ธํ ๋ค ์ ๊ฑฐํ์ฌ ์ ์๋ฅผ ์ป๊ณ ์ฐํ์ ์์ญ์ ๋ธ๋ก์ด ๋์ฌ์๋์ง ํ์ธํ ๋ค ๋ฏธ๋ค์ฃผ๋ ์ญํ ์ ํ๋ค.
ํ ์ค์ฉ ๋ณด์!
static int[][] map;
static int result;
์ ์ญ ๋ณ์์ฒ๋ผ ์ฌ์ฉํ ๋ณ์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค. ์ผ๋จ map์ด๋ผ๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํตํด ๋ธ๋ก์ด ๋์ฌ์๋ ๋ถ๋ถ์ 1, ์๋ ๋ถ๋ถ์ 0์ผ๋ก ํ์ํ ๊ฒ์ด๋ค.
result๋ฅผ ํตํด ์ ์๋ฅผ ์ ์ฅํ ๊ฒ์ด๋ค.
map = new int[10][10];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
int t = Integer.parseInt(st.nextToken());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
block(t, x, y);
}
for๋ฌธ์ ํตํด block ์ ๋ณด๋ฅผ ๋ฐ์์ ํจ์๋ฅผ ์คํํ๋ค. ์ด๋ ์ ๋ ฅ๋ฐ์ ๊ฐ๋ ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์ํ๋ฏ๋ก ๋ฐ๋ก ์ฒ๋ฆฌํด์ฃผ์ง ์์๋ ๋๋ค.
int cnt = 0;
for(int i=0; i<10; i++)
for(int j=0 ;j<10; j++)
if(map[i][j] == 1) cnt++;
System.out.println(result);
System.out.println(cnt);
๋ธ๋ก์ ์ฎ๊ธฐ๊ณ ์ ์ ๊ณ์ฐํ๋ ๊ฒ์ด ๋๋๊ฒ ๋๋ฉด ์ด์ค for๋ฌธ์ผ๋ก ๋ธ๋ก์ ์ธ์ค๋ค. ๊ทธ ๋ค ์ ์์ ๋จ์ ๋ธ๋ก์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
static void block(int t, int x, int y) {
if(t == 1) {
// ํ๋์ ์์ญ
int j = 0;
for(j=4; j<=9; j++) {
if(map[x][j] == 0) continue;
break;
}
map[x][j-1] = 1;
// ์ด๋ก์ ์์ญ
int i=0;
for(i=4; i<=9; i++) {
if(map[i][y] == 0) continue;
break;
}
map[i-1][y] = 1;
}
๋ธ๋ก์ด 1์ธ ๊ฒฝ์ฐ๋ 1x1์ง๋ฆฌ ๋ธ๋ก์ด๋ค. ์ฐ๋ฆฌ๋ ํ๋์ ์์ญ์์ ๋นจ๊ฐ์ ์์ญ์ด ๊ฐ๊น์ด ๊ณณ๋ถํฐ ์กฐ์ฌํ์ฌ ์ด๋์ ๋ธ๋ก์ ๋์์ผํ ์ง ๊ฒฐ์ ํ ๊ฒ์ด๋ค. ๋ค์์ ์ธ๊ธํ๊ฒ ์ง๋ง ๋ค์์๋ถํฐ ์กฐ์ฌํ๊ฒ ๋๋ฉด ์๋ฑํ ๊ณณ์ ๋ธ๋ก์ ๋๊ฒ ๋จ์ ์ ์ํ์!
for๋ฌธ ๋ฐ์์๋ j์ ๊ฐ์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ i, j๋ for๋ฌธ ๋ฐ์์ ์ ์ธํ ๋ค ์ฌ์ฉํด์ค๋ค. ์์์ ๋ถํฐ ์กฐ์ฌํ๋ฉฐ ์ฒ์ 0์ด์๋ ๊ฐ์ด ๋์ค๋ ๊ณณ์ ๋ง๋๋ฉด for๋ฌธ์ ๋ฉ์ถ๋ค. ์ด๋ ๋ธ๋ก์ด ์ ์ ๋ด๋ ค์ค๋ค๊ฐ x, j์นธ์ ๋ง๋๊ณ ๋ธ๋ก์ ์ด๋์ ๋ฉ์ถ๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ธ๋ก์ ์์น๋ ๊ทธ๋ณด๋ค ํ ์นธ ์์ธ x, j-1์นธ์ด ๋๋ค.
์ด๋ก์ ์์ญ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ฏ๋ก ๋์ด๊ฐ๋ค.
else if(t == 2) {
// ํ๋์ ์์ญ
int j=0;
for(j=5; j<= 9; j++) {
if(map[x][j] == 0 && map[x][j-1] == 0) continue;
break;
}
map[x][j-1] = 1; map[x][j-2] = 1;
// ์ด๋ก์ ์์ญ
int i=0;
for(i=4; i<= 9; i++) {
if(map[i][y] == 0 && map[i][y+1] == 0) continue;
break;
}
map[i-1][y] = 1; map[i-1][y+1] = 1;
}
๋ง์ฐฌ๊ฐ์ง๋ก i, j๋ for ๋ฌธ ๋ฐ์์ ์ ์ธํด์ค๋ค.
ํ๋์ ์์ญ์ ์๊น์ ๋ฌ๋ฆฌ 5๋ถํฐ ์กฐ์ฌ๋ฅผ ์์ํ๋๋ฐ ๊ทธ ์ด์ ๋ x, j์นธ๊ณผ x, j-1์นธ์ ๋์์ ์กฐ์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค. j๋ฅผ 4๋ถํฐ ์์ํ๋ ค๋ฉด ์กฐ๊ฑด์์ 8๋ก ๋ณ๊ฒฝํ๊ณ x, j์นธ๊ณผ x, j+1์นธ์ ์กฐ์ฌํ๋ฉด ๋๋ค. ์์์์ ๊ฐ์ด ๋ ์นธ์ด 0์ด๋ฉด ๋ธ๋ก์ ๋์ ์ ์๋ ์นธ์ด๋ฏ๋ก ๊ณ์ continue๋ฅผ ํ๋ค. ์ฒ์์ผ๋ก ๋ธ๋ก์ ๋์ ์ ์๋ ์นธ์ ๋ง๋๋ฉด ๋ธ๋ก์ ๋ ์ด์ ๋ค๋ก ๊ฐ ์ ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๊ทธ ์ ์นธ์ ๋ธ๋ก์ ๋์์ค๋ค.
์ด๋ก์ ์์ญ๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
t๊ฐ 2์ผ ๋์ 3์ผ ๋๋ ํฌ๊ฒ ๋ค๋ฅด์ง ์๊ธฐ ๋๋ฌธ์ 3์ ์ค๋ช ์ ์๋ตํ ๊ฒ์ด๋ค.
static void score() {
// ํ๋์ ์์ญ์์ ๊ฐ๋ ์ฐฌ ์ด ์ฐพ๊ธฐ
f: for(int j=6; j<=9; j++) {
for(int i=0; i<4; i++) {
if(map[i][j] == 0) continue f;
}
result++;
for(int k = j; k>=5; k--) {
for(int i=0; i<4; i++) {
map[i][k] = map[i][k-1];
}
}
for(int i=0; i<4; i++)
map[i][4] = 0;
}
์ด์ ์ ์๋ฅผ ๊ณ์ฐํด์ค ๊ฒ์ด๋ค. ์ ๊ฑฐ ํด์ค ์ด์ 4์นธ์ด ๋ชจ๋ 1์ธ ์ด์ด๋ค.
if๋ฌธ์ ํตํด์ 4์นธ ์ค ํ๋๋ผ๋ 0์ธ ๊ฐ์ด ๋์ค๋ฉด (๋ธ๋ก์ด ์๋ ์นธ) continue๋ฅผ ํตํด ๋ค์ ์ด์ ์กฐ์ฌํ๊ฒ ํ๋ค.
์ด๋ 4์นธ์ด ๋ชจ๋ 1์ด๋ฉด continue๋์ง ์๊ณ ๋ฐ์ ์๋ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ ์๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ๊ณ ๋ธ๋ก์ ํ์นธ์ฉ ๋ค๋ก ๋ฐ์ด์ค๋ค. 4์ด์ ์ ๋ถ ๋ฐ๋ ค๋ฌ๊ธฐ ๋๋ฌธ์ 0์ผ๋ก ์ฑ์ด๋ค.
// ์ด๋ก์ ์์ญ์์ ๊ฐ๋ ์ฐฌ ํ ์ฐพ๊ธฐ
f: for(int i=6; i<=9; i++) {
for(int j=0; j<4; j++) {
if(map[i][j] == 0) continue f;
}
result++;
for(int k = i; k>=5; k--) {
map[k] = map[k-1];
}
map[4] = new int[10];
}
ํ๋์ ์์ญ๊ณผ ์ด๋ก์ ์์ญ์ ํฌ๊ฒ ๋ค๋ฅธ ์ ์ด ์๋ค. ๋ธ๋ก์ ๋ฐ์ด์ฃผ๋ ์ฝ๋๊ฐ ๋น๊ต์ ๊ฐ๋จํ๋ค.
// ์ฐํ์ ์์ญ์ ์นธ ๋น์ฐ๊ธฐ
// 1. ํ๋์
f: for(int j=4; j<=5; j++) {
boolean flag = false;
for(int i=0; i<4; i++) {
if(map[i][j] == 1) {flag = true; break;}
}
if(flag) {
for(int k = 9; k>j; k--) {
for(int i=0; i<4; i++) {
map[i][k] = map[i][k-1];
}
}
for(int i=0; i<4; i++)
map[i][j] = 0;
}
}
for๋ฌธ์ ํตํด 4์นธ ์ค์ ํ๋๋ผ๋ 1์ด๋ผ๋ฉด flag๋ฅผ true๋ก ๋ฐ๊พธ๊ณ for๋ฌธ์ ๋ฉ์ถ๋ค. ์กฐ์ฌํ๋ ์ด์ ๋ธ๋ก์ด ์กด์ฌํ๋ค๋ ๋ป์ด๋ฏ๋ก ์๊น์ ๊ฐ์ด ํ์นธ์ฉ ๋ค๋ก ๋ฐ์ด์ค๋ค. ๊ทธ ๋ค ํด๋น ์ด์ 0์ผ๋ก ์ฑ์ด๋ค.
์์ ์ฝ๋์ ๋ค๋ฅธ ์ ์ for๋ฌธ ๋ฐ์ ์๋ ์ฝ๋๊ฐ ์ ๋ถ 0์ผ๋ก ์ฑ์์ ธ์์ ๋์๋ ์คํ๋๊ธฐ ๋๋ฌธ์ flag๋ฅผ ํตํด ๊ตฌ๋ถ์ ์ ์ค์ผํ๋ค๋ ๊ฒ ๋ฟ์ด๋ค.
๐ก TIP : ๋ค์์๋ถํฐ ์ฑ์ฐ๊ฒ ๋๋ฉด 2๋ก ํํ๋์ผ ํ๋ ๊ฒ 1๋ก ํํ๋๋ค.
'๐ Problem Solving > ๐ป Samsung SW Expert' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] BOJ ๋ฐฑ์ค 17825 ์ฃผ์ฌ์ ์ท๋์ด (0) | 2023.03.06 |
---|---|
[JAVA] BOJ ๋ฐฑ์ค 19237 ์ด๋ฅธ ์์ด (0) | 2023.03.06 |
[JAVA] BOJ ๋ฐฑ์ค 15685 ๋๋๊ณค ์ปค๋ธ (0) | 2023.02.25 |
[JAVA] BOJ ๋ฐฑ์ค 14890 ๊ฒฝ์ฌ๋ก (0) | 2023.02.18 |
[JAVA] BOJ ๋ฐฑ์ค 17779 ๊ฒ๋ฆฌ๋ฉ๋๋ง2 (0) | 2023.02.17 |