아무코딩

[백준 15685] 드래곤 커브 본문

알고리즘/백준

[백준 15685] 드래곤 커브

동 코 2020. 4. 15. 14:50

문제풀이

 

stack을 이용하여 현재까지의 드래곤커브를 저장한뒤 다음 드래곤 커브를 그린다. 

 

소스코드

더보기
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
 
int N;
stack<int> s;
vector<int> dir_order;
int Map[101][101];
 
int dir_x[4= {1,0,-1,0};
int dir_y[4= {0,-1,0,1};
 
 
void MakeDirOrder(int generation){
    s.push(dir_order[0]);
    for(int i=0;i<generation;i++){
        while(!s.empty()){
            int next_dir = (s.top()+1)%4;
            dir_order.push_back(next_dir);
            s.pop();
        }
        for(int j=0;j<dir_order.size();j++){
            s.push(dir_order[j]);
        }
    }
    while(!s.empty())
        s.pop();
}
void makeDragonCurve(int start_x,int start_y){
    int next_x = start_x;
    int next_y = start_y;
    
    Map[next_y][next_x] = 1;
    for(int i=0;i<dir_order.size();i++){
        next_x = next_x+dir_x[dir_order[i]];
        next_y = next_y+dir_y[dir_order[i]];
        
        Map[next_y][next_x]=1;
    }
    
}
 
void findSquare(){
    int cnt=0;
    for(int i=0;i<=100;i++){
        for(int j=0;j<=100;j++){
            if(Map[j][i]==1 && Map[j+1][i]==1 && Map[j][i+1]==1 && Map[j+1][i+1]==1)
                cnt++;
        }
    }
    cout<<cnt<<"\n";
}
int main() {
    int start_x, start_y, dir,generation;
    
    cin>>N;
    
    for(int i=0;i<N;i++){
        cin>>start_x>>start_y>>dir>>generation;
        dir_order.push_back(dir);//방향 저장하여 순서대로 그리기 위함
        MakeDirOrder(generation);
        makeDragonCurve(start_x, start_y);
        dir_order.clear();
    }
    findSquare();
    return 0;
}
 
 

문제 링크 : https://www.acmicpc.net/problem/15685

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1991] 트리 순회  (0) 2020.04.17
[백준 1806] 부분합  (0) 2020.04.17
[백준 5214] 환승  (0) 2020.04.15
[백준 14503] 로봇청소기  (0) 2020.04.06
[백준 16638] 괄호 추가하기 2  (1) 2020.03.31
Comments