์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- upperbound
- PriorityQueue
- ๊ตฌํ
- ์์ด
- ํ์๊ฐ์
- ๋ถ๋ถ์งํฉ
- ๋ค์ต์คํธ๋ผ
- ์ฌ๊ท
- ์๋ฎฌ๋ ์ด์
- ํ๋ก์ด๋์์
- ํฌํฌ์ธํฐ
- ์ด์งํธ๋ฆฌ
- ๋นํธ๋ง์คํน
- Union Find
- ๋ฐฑํธ๋ํน
- ์ด๋ถํ์
- LowerBound
- Dijkstra
- ํธ๋ผ์ด
- BFS
- dp
- ๊ทธ๋ฆฌ๋
- dfs
- ์ฐ์ ์์ํ
- Floyd
- ์นด์นด์ค
- Django
- ์ธ๊ทธ๋จผํธํธ๋ฆฌ
- ์๋ฃ๊ตฌ์กฐ
- ์กฐํฉ
- Today
- Total
J
[JAVA] BOJ ๋ฐฑ์ค 17143 ๋์์ ๋ณธ๋ฌธ
[JAVA] BOJ ๋ฐฑ์ค 17143 ๋์์
snowball๐ฐ 2023. 2. 17. 17:13https://www.acmicpc.net/problem/17143
17143๋ฒ: ๋์์
๋์์์ด ์์ด ๋์๋ฅผ ํ๋ ๊ณณ์ ํฌ๊ธฐ๊ฐ R×C์ธ ๊ฒฉ์ํ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ๊ฒฉ์ํ์ ๊ฐ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๋ค. r์ ํ, c๋ ์ด์ด๊ณ , (R, C)๋ ์๋ ๊ทธ๋ฆผ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋์ ์๋ ์นธ์ด๋ค.
www.acmicpc.net
๋ฌธ์
๋์์์ด ์์ด ๋์๋ฅผ ํ๋ ๊ณณ์ ํฌ๊ธฐ๊ฐ R×C์ธ ๊ฒฉ์ํ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ๊ฒฉ์ํ์ ๊ฐ ์นธ์ (r, c)๋ก ๋ํ๋ผ ์ ์๋ค. r์ ํ, c๋ ์ด์ด๊ณ , (R, C)๋ ์๋ ๊ทธ๋ฆผ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์๋์ ์๋ ์นธ์ด๋ค. ์นธ์๋ ์์ด๊ฐ ์ต๋ ํ ๋ง๋ฆฌ ๋ค์ด์์ ์ ์๋ค. ์์ด๋ ํฌ๊ธฐ์ ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.

๋์์์ ์ฒ์์ 1๋ฒ ์ด์ ํ ์นธ ์ผ์ชฝ์ ์๋ค. ๋ค์์ 1์ด ๋์ ์ผ์ด๋๋ ์ผ์ด๋ฉฐ, ์๋ ์ ํ ์์๋๋ก ์ผ์ด๋๋ค. ๋์์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์ด์ ์ค๋ฅธ์ชฝ ์นธ์ ์ด๋ํ๋ฉด ์ด๋์ ๋ฉ์ถ๋ค.
- ๋์์์ด ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
- ๋์์์ด ์๋ ์ด์ ์๋ ์์ด ์ค์์ ๋ ๊ณผ ์ ์ผ ๊ฐ๊น์ด ์์ด๋ฅผ ์ก๋๋ค. ์์ด๋ฅผ ์ก์ผ๋ฉด ๊ฒฉ์ํ์์ ์ก์ ์์ด๊ฐ ์ฌ๋ผ์ง๋ค.
- ์์ด๊ฐ ์ด๋ํ๋ค.
์์ด๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์๋๋ก ์ด๋ํ๊ณ , ์๋์ ๋จ์๋ ์นธ/์ด์ด๋ค. ์์ด๊ฐ ์ด๋ํ๋ ค๊ณ ํ๋ ์นธ์ด ๊ฒฉ์ํ์ ๊ฒฝ๊ณ๋ฅผ ๋๋ ๊ฒฝ์ฐ์๋ ๋ฐฉํฅ์ ๋ฐ๋๋ก ๋ฐ๊ฟ์ ์๋ ฅ์ ์ ์งํ์ฑ๋ก ์ด๋ํ๋ค.
์ผ์ชฝ ๊ทธ๋ฆผ์ ์ํ์์ 1์ด๊ฐ ์ง๋๋ฉด ์ค๋ฅธ์ชฝ ์ํ๊ฐ ๋๋ค. ์์ด๊ฐ ๋ณด๊ณ ์๋ ๋ฐฉํฅ์ด ์๋์ ๋ฐฉํฅ, ์ผ์ชฝ ์๋์ ์ ํ ์ ์๋ ์๋ ฅ์ด๋ค. ์ผ์ชฝ ์์ ์์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฌธ์๋ฅผ ์ ์๋ค.

์์ด๊ฐ ์ด๋์ ๋ง์น ํ์ ํ ์นธ์ ์์ด๊ฐ ๋ ๋ง๋ฆฌ ์ด์ ์์ ์ ์๋ค. ์ด๋๋ ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ํฐ ์์ด๊ฐ ๋๋จธ์ง ์์ด๋ฅผ ๋ชจ๋ ์ก์๋จน๋๋ค.
๋์์์ด ์์ด ๋์๋ฅผ ํ๋ ๊ฒฉ์ํ์ ์ํ๊ฐ ์ฃผ์ด์ก์ ๋, ๋์์์ด ์ก์ ์์ด ํฌ๊ธฐ์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฒฉ์ํ์ ํฌ๊ธฐ R, C์ ์์ด์ ์ M์ด ์ฃผ์ด์ง๋ค. (2 ≤ R, C ≤ 100, 0 ≤ M ≤ R×C)
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ์์ด์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์์ด์ ์ ๋ณด๋ ๋ค์ฏ ์ ์ r, c, s, d, z (1 ≤ r ≤ R, 1 ≤ c ≤ C, 0 ≤ s ≤ 1000, 1 ≤ d ≤ 4, 1 ≤ z ≤ 10000) ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (r, c)๋ ์์ด์ ์์น, s๋ ์๋ ฅ, d๋ ์ด๋ ๋ฐฉํฅ, z๋ ํฌ๊ธฐ์ด๋ค. d๊ฐ 1์ธ ๊ฒฝ์ฐ๋ ์, 2์ธ ๊ฒฝ์ฐ๋ ์๋, 3์ธ ๊ฒฝ์ฐ๋ ์ค๋ฅธ์ชฝ, 4์ธ ๊ฒฝ์ฐ๋ ์ผ์ชฝ์ ์๋ฏธํ๋ค.
๋ ์์ด๊ฐ ๊ฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ๋ ์๊ณ , ํ๋์ ์นธ์ ๋ ์ด์์ ์์ด๊ฐ ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
๋์์์ด ์ก์ ์์ด ํฌ๊ธฐ์ ํฉ์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
4 6 8
4 1 3 3 8
1 3 5 2 9
2 4 8 4 1
4 5 0 1 4
3 3 1 2 7
1 5 8 4 3
3 6 2 1 2
2 2 2 3 5
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
22
๊ฐ ์นธ์ ์ผ์ชฝ ์๋์ ์ ํ ์๋ ์๋ ฅ, ์ค๋ฅธ์ชฝ ์๋๋ ํฌ๊ธฐ, ์ผ์ชฝ ์๋ ์์ด๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๋ฌธ์์ด๋ค. ์ค๋ฅธ์ชฝ ์์ โค๏ธ๋ ๋์์์ด ์ก์ ๋ฌผ๊ณ ๊ธฐ ํ์์ด๋ค.

์ด๊ธฐ ์ํ

1์ด

2์ด (E๋ฒ ์์ด๋ B๋ฒ์๊ฒ ๋จนํ๋ค)

3์ด

4์ด

5์ด

6์ด
์ ์ฒด ์ฝ๋
import java.util.*;
import java.io.*;
class Shark{
public int r, c, s, d, z;
public Shark(int r, int c, int s, int d, int z) {
this.r = r;
this.c = c;
this.s = s;
this.d = d;
this.z = z;
}
}
public class Main {
static int R;
static int C;
static int M;
static int result;
static List<Shark> s;
static int king;
static Shark[][] sea;
static int[] dx = {0, -1, 1, 0, 0};
static int[] dy = {0, 0, 0, 1, -1}; // ์
๋ ฅ ์ธ๋ฑ์ค๋ฅผ ๋ง์ถ๋ ค๊ณ
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(bf.readLine(), " ");
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
sea = new Shark[R][C];
int T = Integer.parseInt(st.nextToken());
s = new ArrayList<>();
for(int i=0; i<T; i++) {
st = new StringTokenizer(bf.readLine(), " ");
int r = Integer.parseInt(st.nextToken()) -1;
int c = Integer.parseInt(st.nextToken()) -1;
Shark sk = new Shark(r, c, Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
s.add(sk);
sea[r][c] = sk;
}
while(king < C) {
move_shark();
}
sb.append(result);
System.out.println(sb.toString());
}
static void move_shark() {
// ๋์์์ ์ด๋ & ์์ด ์ฌ๋ผ์ง
for(int i=0; i<R; i++) {
if(sea[i][king] != null) {
Shark sk = sea[i][king];
result += sk.z;
s.remove(sk);
sea[i][king] = null;
break;
}
}
// ์์ด์ ์ด๋
int nx, ny;
int size = s.size();
for(int i = size-1; i>=0; i--) {
Shark sk = s.get(i);
if(sea[sk.r][sk.c] == sk)
sea[sk.r][sk.c] = null;
for(int k=0; k<sk.s; k++) {
nx = sk.r + dx[sk.d];
ny = sk.c + dy[sk.d];
if(nx < 0 || ny < 0 || nx >= R || ny >= C) {
if(sk.d % 2 == 0) sk.d -= 1;
else sk.d += 1;
nx = sk.r + dx[sk.d];
ny = sk.c + dy[sk.d];
}
sk.r = nx; sk.c = ny;
}
if(sea[sk.r][sk.c] != null && s.indexOf(sea[sk.r][sk.c]) > i) {
if(sea[sk.r][sk.c].z > sk.z) {
s.remove(i);
}
else {s.remove(sea[sk.r][sk.c]); sea[sk.r][sk.c] = sk;}
}
else {sea[sk.r][sk.c] = sk;}
}
king ++;
}
}
ํ ์ค ์ฉ ์ดํด๋ณด์!
class Shark{
public int r, c, s, d, z;
public Shark(int r, int c, int s, int d, int z) {
this.r = r;
this.c = c;
this.s = s;
this.d = d;
this.z = z;
}
}
์์ด ํด๋์ค๋ฅผ ์ ์ธํ๋ค.
ํ, ์ด์ ์์น์ ์๋ ฅ, ์ด๋ ๋ฐฉํฅ, ํฌ๊ธฐ ์ ๋ณด๋ฅผ ๋ฐ์์ ๊ฐ์ฒด์ ์ ์ฅํ ๊ฒ์ด๋ค.
static int R;
static int C;
static int M;
static int result;
static List<Shark> s;
static int king;
static Shark[][] sea;
static int[] dx = {0, -1, 1, 0, 0};
static int[] dy = {0, 0, 0, 1, -1};
์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ R, C์ ์ ์ฅํ๋ค. ์์ด์ ์๋ M์ ์ ์ฅํด์ค๋ค. result์ ์ก์ ์์ด ํฌ๊ธฐ์ ํฉ์ ์ ์ฅํ ๊ฒ์ด๋ค. s๋ฅผ ํตํด ์์ด ๊ฐ์ฒด ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค๋ค.
๋์์์ ์์น ์ด์ king ๋ณ์์ ์ ์ฅํด์ค๋ค.
sea ๋ฐฐ์ด์ ํตํด ๊ฐ ์์น์ ์๋ ์์ด๋ฅผ ์ ์ฅํด์ค๋ค.
์์ด๋ ์ด 4๊ฐ์ง์ ์ด๋๋ฐฉํฅ์ ๊ฐ๋๋ฐ ์ด๋ 1~4๋ก ์ ๋ ฅ์ด ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ 1~4๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ฒ ์์์ ์ธ๋ฑ์ค๋ฅผ ๋ง์ถ์ด์ฃผ์๋ค.
R = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
sea = new Shark[R][C];
int T = Integer.parseInt(st.nextToken());
s = new ArrayList<>();
for(int i=0; i<T; i++) {
st = new StringTokenizer(bf.readLine(), " ");
int r = Integer.parseInt(st.nextToken()) -1;
int c = Integer.parseInt(st.nextToken()) -1;
Shark sk = new Shark(r, c, Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
s.add(sk);
sea[r][c] = sk;
}
while(king < C) {
move_shark();
}
sb.append(result);
System.out.println(sb.toString());
R, C์ ๊ฐ์ ์ ๋ ฅ ๋ฐ๋๋ค. sea[r][c] ์์น์ ์์ด๊ฐ ์กด์ฌํ๋ฉด ๊ทธ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค.
๋์์์ ์ด ์๋ฅผ ์ด๋ํ๋ฉฐ ์์ง์ด๊ณ ๊ฒฉ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ ์ด์ ๋์๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋์์์ด C๋ณด๋ค ์์ ๋๊น์ง๋ง ๋์๋ฅผ ์งํํ๋ค.
static void move_shark() {
// ๋์์์ ์ด๋ & ์์ด ์ฌ๋ผ์ง
for(int i=0; i<R; i++) {
if(sea[i][king] != null) {
Shark sk = sea[i][king];
result += sk.z;
s.remove(sk);
sea[i][king] = null;
break;
}
}
๋์์์ ํ์ฌ ์์นํ ์ด์ ๊ฐ์ฅ ๊ฐ๊น์ด ํ(์ฆ, 0์ ๊ฐ์ฅ ๊ฐ๊น์ด ํ์ ๊ฐ์ง๋ ๊ณณ)์ ์์ด๋ฅผ ์ก๋๋ค. ํ์ ์ฆ๊ฐ์ํค๋ฉฐ ๊ทธ ์์น์ ์์ด๊ฐ ์กด์ฌํ๋ฉด(null์ด ์๋๋ฉด) ์์ด๋ฅผ ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ list์์ ์ ๊ฑฐํ๊ณ ์์ด์ ํฌ๊ธฐ๋ฅผ ๋ํด์ค๋ค.
์ ๊ฑฐํ๋ฉด์ ์ด๊ธฐํ๋ฅผ ํด์ฃผ๋ ๊ฒ์ ์์ง ๋ง์
int nx, ny;
int size = s.size();
for(int i = size-1; i>=0; i--) {
Shark sk = s.get(i);
if(sea[sk.r][sk.c] == sk)
sea[sk.r][sk.c] = null;
for(int k=0; k<sk.s; k++) {
nx = sk.r + dx[sk.d];
ny = sk.c + dy[sk.d];
if(nx < 0 || ny < 0 || nx >= R || ny >= C) {
if(sk.d % 2 == 0) sk.d -= 1;
else sk.d += 1;
nx = sk.r + dx[sk.d];
ny = sk.c + dy[sk.d];
}
sk.r = nx; sk.c = ny;
}
์์ด๋ฅผ ์ญ์ ํ๋ ๊ณผ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ฅผ ๋ค์์๋ถํฐ ์กฐ์ฌํด์ค๋ค. ๋ํ list์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ณ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ณ์์ ๊ฐ์ ์ ์ฅํ์ฌ ๋์ฒดํ๋ค.
์์ด ๊ฐ์ฒด๋ฅผ ๋ฐ์ ์ด์ฐจ์ ๋ฐฐ์ด์์ ์์ด ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์ด๋ ์์น๋ฅผ ์กฐ์ฌํ์ฌ ๋์ด๊ฐ๋ ๊ฒฝ์ฐ ๋ฐฉํฅ์ ๋ฐ๊ฟ๊ฐ๋ฉด์ ๋ค์ ์์น๋ฅผ ์ง์ ํ๋ค.
if(sea[sk.r][sk.c] != null && s.indexOf(sea[sk.r][sk.c]) > i) {
if(sea[sk.r][sk.c].z > sk.z) {
s.remove(i);
}
else {s.remove(sea[sk.r][sk.c]); sea[sk.r][sk.c] = sk;}
}
else {sea[sk.r][sk.c] = sk;}
}
king ++;
}
}
์ด๋ํ ์์น๊ฐ ๊ฒฐ์ ๋ ๊ฒฝ์ฐ ๊ทธ ์์น์ ๋ค๋ฅธ ์์ด๊ฐ ์กด์ฌํ๋ฉด & ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ด๊ฐ ์ด๋ฒ ์๊ฐ์ ์ด๋ํ ๊ฒ์ด๋ผ๋ฉด? (์ธ๋ฑ์ค๋ฅผ ๊ฑฐ๊พธ๋ก ์ด๋ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ ํฐ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์์ด๋ ๋จผ์ ์ด๋ํ๋ ๊ฒ์ผ๋ก ์ฒดํฌ ๊ฐ๋ฅํ๋ค.)
๊ทธ๋ฐ ๊ฒฝ์ฐ ํฌ๊ธฐ๊ฐ ์์ ์์ด๋ฅผ ์ ๊ฑฐํ๋ค.
๊ทธ ๋ค ๋์์์ ์์น๋ฅผ ์ด๋ํด์ค๋ค.
'๐ Problem Solving > ๐ป Samsung SW Expert' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] BOJ ๋ฐฑ์ค 17779 ๊ฒ๋ฆฌ๋ฉ๋๋ง2 (0) | 2023.02.17 |
---|---|
[JAVA] BOJ ๋ฐฑ์ค 17144 ๋ฏธ์ธ๋จผ์ง ์๋ ! (0) | 2023.02.17 |
[JAVA] BOJ ๋ฐฑ์ค 17142 ์ฐ๊ตฌ์3 (0) | 2023.02.17 |
[JAVA] BOJ ๋ฐฑ์ค 17140 ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ ์ฐ์ฐ (0) | 2023.02.17 |
[JAVA] BOJ ๋ฐฑ์ค 16235 ๋๋ฌด ์ฌํ ํฌ (0) | 2023.02.17 |