알고리즘/시뮬레이션 & 구현

[백준/구현/C++] 15685번 드래곤 커브 *

데메즈 2023. 1. 27. 17:00
728x90
반응형

https://www.acmicpc.net/problem/15685

 

15685번: 드래곤 커브

첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커

www.acmicpc.net

#include <bits/stdc++.h>

#define MAX 101
using namespace std;

int n, x, y, d, g;
int MAP[MAX][MAX];

int dx[] = {0, -1, 0, 1}; // 오른쪽, 위, 왼쪽, 아래
int dy[] = {1, 0, -1, 0};

vector<int> Dir_Info;


void Make_Dragon_curve(){
    int s = Dir_Info.size();
    for(int i=s-1; i>=0; i--){
        int nd = (Dir_Info[i]+1)%4;
        x += dx[nd];
        y += dy[nd];
        MAP[x][y] = 1;

        Dir_Info.push_back(nd);
    }
}

// 칸 세기
void Count_Square(){
    int cnt = 0;
    for(int i=0; i<MAX; i++){
        for(int j=0; j<MAX; j++){
            if(MAP[i][j]==1 && MAP[i+1][j]==1 && MAP[i][j+1]==1 && MAP[i+1][j+1]==1)
                cnt++;
        }
    }
    cout << cnt;
}

void solution(){
    cin >> n;
    for(int i=0; i<n; i++){
        cin >> y >> x >> d >> g;
        Dir_Info.clear();

        MAP[x][y] = 1; // 현재위치 표시
        x += dx[d];
        y += dy[d];
        MAP[x][y] = 1; // 이동한 위치 표시

        Dir_Info.push_back(d); // 방향 넣기
        for(int j=0; j<g; j++){
            Make_Dragon_curve();
        }
    }
    Count_Square();
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    solution();

    return 0;
}

참고 

https://yabmoons.tistory.com/60

728x90
반응형