728x90
규칙 찾으면 끝
N세대의 드래곤 커브는 N-1세대커브의 역순의 막대기들을 뽑아서 그리는데
화살표 방향이 index를 +1한 방향으로 수정한 후에 그리면 된다
드래곤 커브를 세대별로 전부 모아서 그려도 되고
나같은 경우는 그냥 1세대씩 그리고 모으고 그리고 모으고 했음
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Main {
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException{
//→, ↑, ←, ↓
int[] dr = {0, -1, 0, 1};
int[] dc = {1, 0, -1, 0};
int[][] matrix = new int[101][101];
int N = stoi(br.readLine());
for(int i=0; i<N; i++) {
String[] str = br.readLine().split(" ");
int c = stoi(str[0]);
int r = stoi(str[1]);
int dir = stoi(str[2]);
int gen = stoi(str[3]);
List<Integer> dirList = new ArrayList<>();
dirList.add(dir);
matrix[r][c] = 1;
r+=dr[dir];
c+=dc[dir];
matrix[r][c] = 1;
for(int j=1; j<=gen; j++) {
Queue<Integer> q = new LinkedList<>();
for(int k=dirList.size()-1; k>=0; k--) {
int currDir = (dirList.get(k)+1)%4;
r+=dr[currDir];
c+=dc[currDir];
matrix[r][c] = 1;
q.add(currDir);
}
while(!q.isEmpty()) {
dirList.add(q.poll());
}
}
}
// for(int i=0; i<10; i++) {
// for(int j=0; j<10; j++) {
// System.out.print(matrix[i][j]+" ");
// }
// System.out.println();
// }
int answer = 0;
for(int i=0; i<100; i++) {
for(int j=0; j<100; j++) {
if(matrix[i][j]==1 && matrix[i][j+1]==1 &&
matrix[i+1][j]==1 && matrix[i+1][j+1]==1) {
answer++;
}
}
}
System.out.println(answer);
}
private static int stoi(String input) {
return Integer.parseInt(input);
}
}
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준][Java] 1662번 압축 (스택, 구현) (0) | 2021.10.23 |
---|---|
[백준][Java] 14719번 빗물 (시뮬레이션) #2 (0) | 2021.10.22 |
★★ [백준][Java] 2304번 창고 다각형 (시뮬레이션) (0) | 2021.10.22 |
[백준][Java] 2745번 진법 변환 (문자열) (0) | 2021.10.21 |
★ [백준][Java] 2470번 두 용액 (이진탐색) (0) | 2021.10.18 |