<C/C++> BOJ 15685: ๋“œ๋ž˜๊ณค ์ปค๋ธŒ

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

 

15685๋ฒˆ: ๋“œ๋ž˜๊ณค ์ปค๋ธŒ

์ฒซ์งธ ์ค„์— ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋“œ๋ž˜๊ณค ์ปค๋ธŒ์˜ ์ •๋ณด๋Š” ๋„ค ์ •์ˆ˜ x, y, d, g๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. x์™€ y๋Š” ๋“œ๋ž˜๊ณค ์ปค

www.acmicpc.net

 

 

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
#define MAXN 100
#define MAXNN 20
int N;
int G, D, nr, nc;
int map[MAXN + 5][MAXN + 5];
vector<int> point;
static int dr[] = { 0, -1, 0, 1 };
static int dc[] = { 1, 0, -1, 0 };

void recur(int cnt, int dir) {
	if (cnt >= G) return;
	int SIZE = (int)point.size();
	for (int i = SIZE - 1; i >= 0; i--) {
		int dir = (point[i] + 1) % 4;
		nr += dr[dir];
		nc += dc[dir];
		map[nr][nc] = 1;
		point.push_back(dir);
	}
	recur(cnt + 1, dir);
}

void InputData(void) {
	int r, c;
	cin >> N;
	memset(map, 0, sizeof(map));
	for (int i = 0; i < N; i++) {
		cin >> c >> r >> D >> G; // ์‹œ์ž‘์ , ์‹œ์ž‘๋ฐฉํ–ฅ, ์„ธ๋Œ€
		nr = r + dr[D]; nc = c + dc[D];
		point.clear();
		map[r][c] = 1;
		map[nr][nc] = 1;
		point.push_back(D);
		recur(0, D); // ์„ธ๋Œ€, ๊ธฐ์ค€์ 
	}
}

int Count(void) {
	int cnt = 0;
	for (int i = 0; i <= 100; i++) {
		for (int j = 0; j <= 100; j++) {
			if (map[i][j] && map[i + 1][j] && map[i][j + 1] && map[i + 1][j + 1]) cnt++;
		}
	}

	return cnt;
}

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	InputData();
	int ans = Count();
	cout << ans << endl;
	return 0;
}

90๋„ ํšŒ์ „ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์ง€์ ๋งˆ๋‹ค ๋ฐ”๊ฟ”์ค€๋‹ค๋Š” ์ƒ๊ฐ์— ์• ๋จน์—ˆ์Œ
ํ•˜์ง€๋งŒ dr. dc๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ์Œ

๋ฐฉํ–ฅ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฑฐ ์ฃผ์˜!