https://www.acmicpc.net/problem/20056
๋ฌธ์
์ด๋ฅธ ์์ด๊ฐ ๋ง๋ฒ์ฌ๊ฐ ๋์๊ณ , ํ์ด์ด๋ณผ์ ๋ฐฐ์ ๋ค.
๋ง๋ฒ์ฌ ์์ด๊ฐ ํฌ๊ธฐ๊ฐ N×N์ธ ๊ฒฉ์์ ํ์ด์ด๋ณผ M๊ฐ๋ฅผ ๋ฐ์ฌํ๋ค. ๊ฐ์ฅ ์ฒ์์ ํ์ด์ด๋ณผ์ ๊ฐ์ ์์น์์ ์ด๋์ ๋๊ธฐํ๊ณ ์๋ค. i๋ฒ ํ์ด์ด๋ณผ์ ์์น๋ (ri, ci), ์ง๋์ mi์ด๊ณ , ๋ฐฉํฅ์ di, ์๋ ฅ์ si์ด๋ค. ์์น (r, c)๋ rํ c์ด์ ์๋ฏธํ๋ค.
๊ฒฉ์์ ํ๊ณผ ์ด์ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๊ณ , 1๋ฒ ํ์ N๋ฒ๊ณผ ์ฐ๊ฒฐ๋์ด ์๊ณ , 1๋ฒ ์ด์ N๋ฒ ์ด๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ค.
ํ์ด์ด๋ณผ์ ๋ฐฉํฅ์ ์ด๋ค ์นธ๊ณผ ์ธ์ ํ 8๊ฐ์ ์นธ์ ๋ฐฉํฅ์ ์๋ฏธํ๋ฉฐ, ์ ์๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
7 | 0 | 1 |
6 | 2 | |
5 | 4 | 3 |
๋ง๋ฒ์ฌ ์์ด๊ฐ ๋ชจ๋ ํ์ด์ด๋ณผ์๊ฒ ์ด๋์ ๋ช ๋ นํ๋ฉด ๋ค์์ด ์ผ๋ค์ด ์ผ์ด๋๋ค.
- ๋ชจ๋ ํ์ด์ด๋ณผ์ด ์์ ์ ๋ฐฉํฅ di๋ก ์๋ ฅ si์นธ ๋งํผ ์ด๋ํ๋ค.
- ์ด๋ํ๋ ์ค์๋ ๊ฐ์ ์นธ์ ์ฌ๋ฌ ๊ฐ์ ํ์ด์ด๋ณผ์ด ์์ ์๋ ์๋ค.
- ์ด๋์ด ๋ชจ๋ ๋๋ ๋ค, 2๊ฐ ์ด์์ ํ์ด์ด๋ณผ์ด ์๋ ์นธ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ผ์ด ์ผ์ด๋๋ค.
- ๊ฐ์ ์นธ์ ์๋ ํ์ด์ด๋ณผ์ ๋ชจ๋ ํ๋๋ก ํฉ์ณ์ง๋ค.
- ํ์ด์ด๋ณผ์ 4๊ฐ์ ํ์ด์ด๋ณผ๋ก ๋๋์ด์ง๋ค.
- ๋๋์ด์ง ํ์ด์ด๋ณผ์ ์ง๋, ์๋ ฅ, ๋ฐฉํฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ง๋์ ⌊(ํฉ์ณ์ง ํ์ด์ด๋ณผ ์ง๋์ ํฉ)/5⌋์ด๋ค.
- ์๋ ฅ์ ⌊(ํฉ์ณ์ง ํ์ด์ด๋ณผ ์๋ ฅ์ ํฉ)/(ํฉ์ณ์ง ํ์ด์ด๋ณผ์ ๊ฐ์)⌋์ด๋ค.
- ํฉ์ณ์ง๋ ํ์ด์ด๋ณผ์ ๋ฐฉํฅ์ด ๋ชจ๋ ํ์์ด๊ฑฐ๋ ๋ชจ๋ ์ง์์ด๋ฉด, ๋ฐฉํฅ์ 0, 2, 4, 6์ด ๋๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด 1, 3, 5, 7์ด ๋๋ค.
- ์ง๋์ด 0์ธ ํ์ด์ด๋ณผ์ ์๋ฉธ๋์ด ์์ด์ง๋ค.
๋ง๋ฒ์ฌ ์์ด๊ฐ ์ด๋์ K๋ฒ ๋ช ๋ นํ ํ, ๋จ์์๋ ํ์ด์ด๋ณผ ์ง๋์ ํฉ์ ๊ตฌํด๋ณด์.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N, M, K๊ฐ ์ฃผ์ด์ง๋ค.
๋์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ํ์ด์ด๋ณผ์ ์ ๋ณด๊ฐ ํ ์ค์ ํ๋์ฉ ์ฃผ์ด์ง๋ค. ํ์ด์ด๋ณผ์ ์ ๋ณด๋ ๋ค์ฏ ์ ์ ri, ci, mi, si, di๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์๋ก ๋ค๋ฅธ ๋ ํ์ด์ด๋ณผ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์๋๋ค.
์ถ๋ ฅ
๋ง๋ฒ์ฌ ์์ด๊ฐ ์ด๋์ K๋ฒ ๋ช ๋ นํ ํ, ๋จ์์๋ ํ์ด์ด๋ณผ ์ง๋์ ํฉ์ ์ถ๋ ฅํ๋ค.
ํ์ด
์๋ฎฌ๋ ์ด์ & ๊ตฌํ ๋ฌธ์ ์ด๋ค. (๊ฐ์ฅ.... ๋ชปํ๊ฒ...ใ .....๐ค)
๊ฐ ํ์ด์ด๋ณผ์ ์ ๋ณด(r, c, m, s, d) ๋ฅผ ์ ์ฅํ ๊ฐ์ฒด class fireBall์ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ N x N ๊ฒฉ์๋ฅผ ArrayList 2์ฐจ์ ๋ฐฐ์ด๋ก ๊ตฌํํ๋ค. (List<fireBall>[][] map)
map[i][j] ์๋ (i, j)์ ์์นํ ํ์ด์ด๋ณผ ๊ฐ์ฒด๊ฐ ์ ์ฅ๋์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํ์ด์ด๋ณผ ์ ์ฅ์๋ List<fireBall> fireBallList์ ์ด์ฉํ๋ค.
1. ํ์ด์ด๋ณผ ์ด๋
fireBallList ์ ์ ์ฅ๋ ํ์ด์ด๋ณผ๋ค์ ์ด๋ํ๋ค. ์ด ๋, ์๋๋ฅผ % N ํด์ฃผ๋ ์ด์ ๋ ์๋๊ฐ ์ต๋ 1,000 ์ผ๋ก N๋ณด๋ค ํด ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฏธํ ๋ฐ๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค. ๊ทธ๋ ๊ฒ ์ด๋ํ ํ์ด์ด๋ณผ๋ค์ map์ ์ ์ฅํด์ค๋ค.
2. ํ์ด์ด๋ณผ ํฉ์ฒด & ๋ถ์ด
map์ ์ํํ๋ฉด์ size๊ฐ 2 ๋ฏธ๋ง์ด๋ฉด clearํด์ค๋ค. 2 ์ด์์ด๋ฉด ๋ชจ๋ ์ง๋๊ณผ ์๋๋ฅผ ํฉํ ๊ฐ์ ๊ตฌํ๋ฉด์, ๋ฐฉํฅ์ด ๋ชจ๋ ์ง์ (๋๋ ํ์)๋ก ์ผ์นํ๋์ง ํ์ธํ๋ค. ํฉ์น ํ์ด์ด๋ณผ์ fireBallList์์ ์ญ์ ํด์ฃผ๊ณ , ์๋ก ๋ถ์ดํ 4๊ฐ์ ํ์ด์ด๋ณผ์ ์์ฑํด fireBallList์ ์ ์ฅํด์ค๋ค.
๋ง์ง๋ง์ fireBallList์ ์ ์ฅ๋ ํ์ด์ด๋ณผ๋ค์ ์ง๋์ ๋ชจ๋ ๋ํด์ ์ถ๋ ฅํด์ค๋ค!!
์์๋๋กํ๋ฉด ์ด๋ ต์ง ์์ ๊ฒ๊ฐ์๋ฐ.... ๋์๊ฒ ์์ง ๊ตฌํ๋ฌธ์ ๋ ๋จธ๋ฆฌ๊ฐ ์ํ๋ค....ํ๐คฎ
์ฝ๋
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_BOJ_20056_๋ง๋ฒ์ฌ์์ด์ํ์ด์ด๋ณผ {
static class fireBall{
int r; // row
int c; // col
int m; // mass
int s; // speed
int d; // direction
fireBall(int r, int c, int m, int s, int d){
this.r = r;
this.c = c;
this.m = m;
this.s = s;
this.d = d;
}
}
static List<fireBall>[][] map;
static List<fireBall> fireBallList = new ArrayList<>();
static int dr[] = {-1,-1,0,1,1,1,0,-1};
static int dc[] = {0,1,1,1,0,-1,-1,-1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
int N = Integer.parseInt(stringTokenizer.nextToken());
int M = Integer.parseInt(stringTokenizer.nextToken());
int K = Integer.parseInt(stringTokenizer.nextToken());
map = new List[N][N];
for(int i = 0 ; i < N ;i++){
for(int j = 0 ; j < N; j++){
map[i][j] = new ArrayList<>();
}
}
for(int i = 0; i < M ;i++){
stringTokenizer = new StringTokenizer(br.readLine());
int r = Integer.parseInt(stringTokenizer.nextToken());
int c = Integer.parseInt(stringTokenizer.nextToken());
int m = Integer.parseInt(stringTokenizer.nextToken());
int s = Integer.parseInt(stringTokenizer.nextToken());
int d = Integer.parseInt(stringTokenizer.nextToken());
fireBallList.add(new fireBall(r-1, c-1, m, s, d));
}
while(K-- > 0){
// ์ด๋
for(fireBall fBall : fireBallList){
// s ๊ฐ ์ต๋ 1,000์ผ๋ก N์ ์ด๊ณผํ ์ ์๊ธฐ ๋๋ฌธ์ % N
int nr = fBall.r + dr[fBall.d] *(fBall.s % N);
int nc = fBall.c + dc[fBall.d] *(fBall.s % N);
if(nr >= N)
nr -= N;
else if(nr < 0)
nr += N;
if(nc >= N)
nc -= N;
else if(nc < 0)
nc += N;
fBall.r = nr;
fBall.c = nc;
map[fBall.r][fBall.c].add(fBall);
}
// ํ์ด์ด๋ณผ์ด ๋๊ฐ ์ด์์ธ๊ณณ ํ์ธ
for(int i = 0 ; i < N; i++){
for(int j = 0 ; j < N; j++){
// 2๊ฐ ๋ฏธ๋ง์ด๋ฉด ์ง์ฐ๊ณ continue;
if(map[i][j].size() < 2){
map[i][j].clear();
continue;
}
// 2๊ฐ ์ด์์ด๋ฉด
// 1. ๋ฐฉํฅ์ด ๋ชจ๋ ์ง์(ํ์)์ธ์ง ์๋์ง ํ์ธ
boolean even = map[i][j].get(0).d % 2 == 0 ? true : false;
boolean odd = map[i][j].get(0).d % 2 == 1 ? true : false;
int mSum = 0; // ์ง๋ ํฉ
int sSum = 0; // ์๋ ํฉ
for(fireBall f : map[i][j]){
mSum += f.m;
sSum += f.s;
// ๋ฐฉํฅ์ด ์ง์์ธ์ง
even = even && f.d % 2 == 0 ? true : false;
// ๋ฐฉํฅ์ด ํ์์ธ์ง
odd = odd && f.d % 2 == 1 ? true : false;
fireBallList.remove(f);
}
int nMass = Math.floorDiv(mSum, 5);
int nSpeed = Math.floorDiv(sSum, map[i][j].size());
map[i][j].clear();
if(nMass == 0)
continue;
// ๋ฐฉํฅ์ด ๋ชจ๋ ํ์(์ง์) ์ด๋ฉด
if(even || odd){
// ๋ฐฉํฅ์ด 0, 2, 4, 6
for(int k = 0 ; k < 7 ; k += 2)
fireBallList.add(new fireBall(i,j,nMass, nSpeed, k));
}
// ์๋๋ฉด
else{
// ๋ฐฉํฅ์ด 1, 3, 5, 7
for(int k = 1; k < 8 ; k+=2)
fireBallList.add(new fireBall(i, j, nMass, nSpeed, k));
}
}
}
}
int ans = 0;
for(fireBall f : fireBallList)
ans += f.m;
System.out.println(ans);
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค / BOJ 18427] ํจ๊ป ๋ธ๋ก ์๊ธฐ (0) | 2021.09.14 |
---|---|
[๋ฐฑ์ค / BOJ 2109] ์ํ๊ฐ์ฐ (0) | 2021.09.14 |
[๋ฐฑ์ค / BOJ 2026] ์ํ (0) | 2021.09.14 |
[๋ฐฑ์ค / BOJ 17069] ํ์ดํ ์ฎ๊ธฐ๊ธฐ 2 (0) | 2021.09.14 |
[๋ฐฑ์ค / BOJ 12782] ๋นํธ ์ฐ์ ์ง์ (0) | 2021.09.14 |