๐ ๋ฌธ์
https://www.acmicpc.net/problem/15685
๋ฌธ์
๋๋๊ณค ์ปค๋ธ๋ ๋ค์๊ณผ ๊ฐ์ ์ธ ๊ฐ์ง ์์ฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ด์ฐจ์ ์ขํ ํ๋ฉด ์์์ ์ ์๋๋ค. ์ขํ ํ๋ฉด์ x์ถ์ → ๋ฐฉํฅ, y์ถ์ ↓ ๋ฐฉํฅ์ด๋ค.
- ์์ ์
- ์์ ๋ฐฉํฅ
- ์ธ๋
0์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๊ธธ์ด๊ฐ 1์ธ ์ ๋ถ์ด๋ค. ์๋ ๊ทธ๋ฆผ์ (0, 0)์์ ์์ํ๊ณ , ์์ ๋ฐฉํฅ์ ์ค๋ฅธ์ชฝ์ธ 0์ธ๋ ๋๋๊ณค ์ปค๋ธ์ด๋ค.
1์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ 0์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ๋ ์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ ๋ฐฉํฅ์ผ๋ก 90๋ ํ์ ์ํจ ๋ค์ 0์ธ๋ ๋๋๊ณค ์ปค๋ธ์ ๋ ์ ์ ๋ถ์ธ ๊ฒ์ด๋ค. ๋ ์ ์ด๋ ์์ ์ ์์ ์ ๋ถ์ ํ๊ณ ์ด๋ํ์ ๋, ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ ์๋ ์ ์ ์๋ฏธํ๋ค.
2์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ 1์ธ๋๋ฅผ ๋ง๋ ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ๋ง๋ค ์ ์๋ค. (ํ๋์ ์ ๋ถ์ ์๋ก ์ถ๊ฐ๋ ์ ๋ถ์ ๋ํ๋ธ๋ค)
3์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ 2์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ์ด์ฉํด ๋ง๋ค ์ ์๋ค. ์๋ ๊ทธ๋ฆผ์ 3์ธ๋ ๋๋๊ณค ์ปค๋ธ์ด๋ค.
์ฆ, K(K > 1)์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ K-1์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ๋ ์ ์ ๊ธฐ์ค์ผ๋ก 90๋ ์๊ณ ๋ฐฉํฅ ํ์ ์ํจ ๋ค์, ๊ทธ๊ฒ์ ๋ ์ ์ ๋ถ์ธ ๊ฒ์ด๋ค.
ํฌ๊ธฐ๊ฐ 100×100์ธ ๊ฒฉ์ ์์ ๋๋๊ณค ์ปค๋ธ๊ฐ N๊ฐ ์๋ค. ์ด๋, ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ๋ค ๊ผญ์ง์ ์ด ๋ชจ๋ ๋๋๊ณค ์ปค๋ธ์ ์ผ๋ถ์ธ ์ ์ฌ๊ฐํ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๊ฒฉ์์ ์ขํ๋ (x, y)๋ก ๋ํ๋ด๋ฉฐ, 0 ≤ x ≤ 100, 0 ≤ y ≤ 100๋ง ์ ํจํ ์ขํ์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋๋๊ณค ์ปค๋ธ์ ๊ฐ์ N(1 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๋๋๊ณค ์ปค๋ธ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋๋๊ณค ์ปค๋ธ์ ์ ๋ณด๋ ๋ค ์ ์ x, y, d, g๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. x์ y๋ ๋๋๊ณค ์ปค๋ธ์ ์์ ์ , d๋ ์์ ๋ฐฉํฅ, g๋ ์ธ๋์ด๋ค. (0 ≤ x, y ≤ 100, 0 ≤ d ≤ 3, 0 ≤ g ≤ 10)
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋๋๊ณค ์ปค๋ธ๋ ๊ฒฉ์ ๋ฐ์ผ๋ก ๋ฒ์ด๋์ง ์๋๋ค. ๋๋๊ณค ์ปค๋ธ๋ ์๋ก ๊ฒน์น ์ ์๋ค.
๋ฐฉํฅ์ 0, 1, 2, 3 ์ค ํ๋์ด๊ณ , ๋ค์์ ์๋ฏธํ๋ค.
- 0: x์ขํ๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ (→)
- 1: y์ขํ๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ (↑)
- 2: x์ขํ๊ฐ ๊ฐ์ํ๋ ๋ฐฉํฅ (←)
- 3: y์ขํ๊ฐ ์ฆ๊ฐํ๋ ๋ฐฉํฅ (↓)
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํฌ๊ธฐ๊ฐ 1×1์ธ ์ ์ฌ๊ฐํ์ ๋ค ๊ผญ์ง์ ์ด ๋ชจ๋ ๋๋๊ณค ์ปค๋ธ์ ์ผ๋ถ์ธ ๊ฒ์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
๐ก ๋๋๊ณค์ปค๋ธ๋ฅผ ๊ทธ๋ฆฐ ์งํ ๋ฐฉํฅ๋ค์, ๋์ ์ ๊ธฐ์ค์ผ๋ก ํ์ฌ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆด ๋ ์ผ์ ํ ๊ท์น์ ๊ฐ๋๋ค.
์๋ฅผ ๋ค์ด 0์ธ๋ ๋๋๊ณค์ปค๋ธ๋ฅผ ๊ทธ๋ฆฐ ์งํ๋ฐฉํฅ์ โก๏ธ ์ด๋ค.
์ด๋ ๋์ (๊ฐ์ฅ ๋ง์ง๋ง์ ๋๋ฌํ ์ขํ)์ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด, ๊ทธ ๋ค์ ์ปค๋ธ๋ฅผ ๊ทธ๋ ค์ผ ํ ์งํ ๋ฐฉํฅ์ ์์ชฝ์ด ๋๋ค โฌ๏ธ
์ ๊ฐ๋ ์ ๊ฐ์ง๊ณ ๊ท์น์ ์ ๋ฆฌํ๋ฉด ์๋์ ๊ฐ๋ค.
* ๋๋๊ณค์ปค๋ธ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ค์ ์งํ๋ฐฉํฅ์ ์ฐพ๋ ๊ท์น
โก๏ธ(0)์ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด โฌ๏ธ(1)
โฌ๏ธ(1)์ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด โฌ ๏ธ(2)
โฌ ๏ธ(2)๋ฅผ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด โฌ๏ธ(3)
โฌ๏ธ(3)์ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฌ๋ฉด โก๏ธ(0)
๋ฐ๋ผ์ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฐฉํฅ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ ๋, ํน์ ์งํ ๋ฐฉํฅ์์ ๋์ ์ ๊ธฐ์ค์ผ๋ก ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์ ํ๋ฉด, ๋ค์ ์งํ ๋ฐฉํฅ์ ์ด์ ๋ฐฉํฅ์ธ๋ฑ์ค+1์ด ๋๋ค๋ ๊ฒ์ ์ฐพ์ ์ ์๋ค.
์์๋ฅผ ๋ ๋ค์ด๋ณด๊ฒ ๋ค.
1์ธ๋ ๋๋๊ณค์ปค๋ธ๋ (โก๏ธ, โฌ๏ธ) ์์๋ก ๊ทธ๋ ค์ง๋ค.
์ด๋ 2์ธ๋ ๋๋๊ณค์ปค๋ธ๋ 1์ธ๋๋ฅผ ๊ทธ๋ฆฐ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ํ ๋ ์ต๊ทผ ์์๋๋ก (โฌ๏ธ๋ฅผ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฐ โฌ ๏ธ)์ (โก๏ธ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฐ โฌ๏ธ)์ ์ถ๊ฐ๋ก ๊ทธ๋ฆฐ (โก๏ธ, โฌ๏ธ, โฌ ๏ธ, โฌ๏ธ)๊ฐ ๋๋ค. ์ด๋ ๊ตฌํ ์ฝ๋์์ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ก ์ ์ฅ๋๋ค.
์ ๋ฆฌํ์๋ฉด 1์ธ๋ ๋๋๊ณค์ปค๋ธ๋ฅผ ๊ทธ๋ฆฐ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ (0,1)์ด๊ณ , 2์ธ๋ ๋๋๊ณค์ปค๋ธ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ (0,1,2,1)์ด ๋๋ค.
์ด์ ์ธ๋์ ๋ฐฉํฅ์ธ๋ฑ์ค๋ฅผ ํ ์นธ์ฉ ์ฆ๊ฐ์ํจ ๊ฐ๋ค์ด ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๐ ์ ๋ฆฌ
โ๏ธ ์ฃผ์ด์ง ์ธ๋๋งํผ ๋ฃจํ๋ฅผ ๋๋ฉด์ ๋๋๊ณค์ปค๋ธ๋ฅผ ๊ทธ๋ฆฐ๋ค.
โ๏ธ K+1์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ๊ทธ๋ฆด ๋์๋ K์ธ๋ ๋๋๊ณค ์ปค๋ธ๋ฅผ ๊ทธ๋ฆฐ ๋ฐฉํฅ ์ธ๋ฑ์ค๋ฅผ ์ต๊ทผ ์์๋๋ก ๊ฐ์ ธ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ๋๋ฆฐ ํ, ๋์ ์ ๊ธฐ์ค์ผ๋ก ์ถ๊ฐํด ๊ทธ๋ ค๋๊ฐ๋ค.
โ๏ธ ์ฃผ์ด์ง ์ธ๋๊น์ง ๋ชจ๋ ๊ทธ๋ ธ์ผ๋ฉด, ์์ ํ์์ผ๋ก ์ ์ฌ๊ฐํ ๊ฐ์๋ฅผ ํ์ํ๋ค.
๐โ๏ธ ์๊ฒฌ
๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ ์๊ฐ์ ์ข ์ผ๋ค......
๊ทธ๋๋ ์๋ฎฌ๋ ์ด์ ์ ์ฐจ๊ทผ์ฐจ๊ทผ ์ผ๋จ ๋จ๊ณ๋ณ๋ก ๊ทธ๋ฆฌ๊ธฐ ์์ํ๋ฉด ํ์ด๋ฅผ ํ์ ํ ์ ์๋ ๊ฒ ๊ฐ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
public class Main_๋ฐฑ์ค_15685_๋๋๊ณค์ปค๋ธ_๊ณจ๋IV {
static int[] dy = {0,-1,0,1};
static int[] dx = {1,0,-1,0};
static int direction;
static int[][] map;
static LinkedList<Integer> list;
static int cx, cy;
// ->(0)์ ๋์ ์ผ๋ก ๋๋ฆฌ๋ฉด ^(1)
// ^(1)์ ๋์ ์ผ๋ก ๋๋ฆฌ๋ฉด <-(2)
// <-(2)๋ฅผ ๋์ ์ผ๋ก ๋๋ฆฌ๋ฉด ใ
(3)
// ใ
(3)์ ๋์ ์ผ๋ก ๋๋ฆฌ๋ฉด ->(0)
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
map = new int[101][101];
list = new LinkedList<>();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) { //input
StringTokenizer st = new StringTokenizer(br.readLine());
cx = Integer.parseInt(st.nextToken());
cy = Integer.parseInt(st.nextToken());
int dir = Integer.parseInt(st.nextToken());
int level = Integer.parseInt(st.nextToken());
list.add(dir); // 0์ธ๋
map[cy][cx]=1;
cy += dy[dir];
cx += dx[dir];
map[cy][cx]=1;
for (int l = 1; l <= level; l++) {
drawDragon();
}
list.clear();
}
System.out.println(countBox());
}//end of main
private static void drawDragon() {
// 0: ->
// 1: ->์์ ใ
์ ์ถ๊ฐ๋ก ๊ทธ๋ฆฐ๋ค.
// 2: ->, ใ
์์ <, ใ
๋ฅผ ์ถ๊ฐ๋ก ๊ทธ๋ฆฐ๋ค
// 3: ->, ใ
, <, ใ
์์ <, ^, <, ใ
์ ์ถ๊ฐ๋ก ๊ทธ๋ฆฐ๋ค.
for (int i = list.size()-1; i >= 0; i--) {
int d = list.get(i);
d = (d+1)==4?0:d+1;
cy += dy[d];
cx += dx[d];
list.add(d);
map[cy][cx]=1;
}
}//end of drawDragon
private static int countBox() {
int cnt = 0;
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if(map[i][j]==1 && map[i+1][j]==1 &&
map[i][j+1]==1 & map[i+1][j+1]==1)
cnt++;
}
}
return cnt;
}//end of countBox
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ