728x90
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
using namespace std;
int n;
int dx[] = {0,-1,0,1};
int dy[] = {1,0,-1,0}; // 0,1,2,3
int sqx[] = {0,1,0,1};
int sqy[] = {0,0,1,1};
bool check[101][101];
int ex, ey;
vector<int>dragon;
bool cango(int x, int y) {
return x >= 0 && x <= 100 && y >= 0 && y <= 100;
}
void checkDragon(vector<int>&dragon) {
int sz = dragon.size(); // stack의 원리를 이용한다.
for (int i = sz - 1; i >= 0; i--) {
int dir = (dragon[i] + 1) % 4;
ex = ex + dx[dir];
ey = ey + dy[dir];
check[ex][ey] = true;
dragon.push_back(dir);
}
}
int findSquare() {
int count = 0;
for (int i = 0; i<= 99; i++) {
for(int j=0; j<=99; j++){
bool toggle = true;
for (int t = 0; t < 4; t++) {
int tx = i + sqx[t];
int ty = j + sqy[t];
if (check[tx][ty]== false) {
toggle = false;
break;
}
}
if (toggle == true) {
count++;
}
}
}
return count;
}
int main() {
cin >> n;
int x, y, d, g;
memset(check, false, sizeof(check));
for (int i = 0; i < n; i++) {
cin >> y; //입력은 y,x 순으로 받아야함.
cin >> x;
cin >> d;
cin >> g;
dragon.clear();
check[x][y] = true;
ex = x + dx[d];
ey = y + dy[d];
check[ex][ey] = true;
dragon.push_back(d);
for (int i = 0; i < g; i++) {
checkDragon(dragon);
}
}
cout <<findSquare()<<endl;
}
- 스택을 이용해야 한다는게 신박했던 문제인것 같다.
'백준 > 삼성기출' 카테고리의 다른 글
큐빙 (0) | 2021.04.19 |
---|---|
치킨 배달 (0) | 2021.04.19 |
어른상어/ 시뮬레이션 (0) | 2021.04.12 |
청소년 상어/ 백트래킹 (0) | 2021.04.12 |
주사위 윷놀이, 비트연산자 (0) | 2021.04.12 |