728x90
https://www.acmicpc.net/problem/15685
처음에 이해하기 어려운 문제였다ㅠㅠ
- 0: x좌표가 증가하는 방향 (→)
- 1: y좌표가 감소하는 방향 (↑)
- 2: x좌표가 감소하는 방향 (←)
- 3: y좌표가 증가하는 방향 (↓)
백준의 예시를 보면
1세대 : → (0)
2세대 : 1세대 +1 =1 따라서, ↑
3세대 : 2세대 +1 =2 , 1세대 +1 = 1 따라서, ← 과 ↑
4세대 : 3세대 +1 = 3, 2세대 +1= 2, 1세대 +1 = 1 따라서, ↓과 ← 과 ↑
이렇게 방향이 바뀌게 된다.
따라서 가장 처음의 방향에다가 세대마다 추가되는 방향을 list에 넣고,
시작점에서 부터 방향에 따라 주어지는 끝점에 1로 표시를 해주면 된다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static int[][] arr = new int[101][101];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
int g = Integer.parseInt(st.nextToken());
draw(x, y, getDirections(d, g));
}
int result = 0;
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (arr[i][j] == 1 && arr[i + 1][j] == 1 && arr[i + 1][j + 1] == 1 && arr[i][j + 1] == 1)
result++;
}
}
System.out.println(result);
}
static ArrayList<Integer> getDirections(int d, int g) {
ArrayList<Integer> list = new ArrayList<>();
list.add(d);
while (g-- > 0) {
for (int i = list.size() - 1; i >= 0; i--) {
int dd = (list.get(i) + 1) % 4;
list.add(dd);
}
}
return list;
}
static void draw(int x, int y, ArrayList<Integer> list) {
arr[x][y]=1;
while (!list.isEmpty()) {
int dd = list.get(0);
switch (dd) {
case 0:
arr[++x][y] = 1;
break;
case 1:
arr[x][--y] = 1;
break;
case 2:
arr[--x][y] = 1;
break;
case 3:
arr[x][++y] = 1;
break;
}
list.remove(0);
}
}
}
'Java' 카테고리의 다른 글
[백준 9082] 지뢰찾기 (JAVA) (0) | 2023.05.30 |
---|---|
[백준 21620] 마법사 상어와 비바라기 (JAVA) (0) | 2023.05.30 |
[백준 2573] 빙산 (JAVA) (1) | 2023.05.25 |
[백준 1937] 욕심쟁이 판다 (JAVA) (0) | 2023.05.23 |
[백준 2631] 줄세우기 (JAVA) (0) | 2023.05.23 |