ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ณต๋ถ€/C++

๋ฐฑ์ค€ 14503๋ฒˆ : ๋กœ๋ด‡์ฒญ์†Œ๊ธฐ with C++

์—ฐ์ด14 2023. 4. 6. 14:34

๋ฌธ์ œ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ์™€ ๋ฐฉ์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฒญ์†Œํ•˜๋Š” ์˜์—ญ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ๋ฐฉ์€ N x  M ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, 1×1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นธ์€ ๋ฒฝ ๋˜๋Š” ๋นˆ ์นธ์ด๋‹ค. ์ฒญ์†Œ๊ธฐ๋Š” ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด ์žˆ์œผ๋ฉฐ, ์ด ๋ฐฉํ–ฅ์€ ๋™, ์„œ, ๋‚จ, ๋ถ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋ฐฉ์˜ ๊ฐ ์นธ์€ ์ขŒํ‘œ (r, c)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , ๊ฐ€์žฅ ๋ถ์ชฝ ์ค„์˜ ๊ฐ€์žฅ ์„œ์ชฝ ์นธ์˜ ์ขŒํ‘œ๊ฐ€ (0,0) ๊ฐ€์žฅ ๋‚จ์ชฝ ์ค„์˜ ๊ฐ€์žฅ ๋™์ชฝ ์นธ์˜ ์ขŒํ‘œ๊ฐ€ ์ด๋‹ค. ์ฆ‰, ์ขŒํ‘œ ๋Š” ๋ถ์ชฝ์—์„œ ๋ฒˆ์งธ์— ์žˆ๋Š” ์ค„์˜ ์„œ์ชฝ์—์„œ ๋ฒˆ์งธ ์นธ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ฒ˜์Œ์— ๋นˆ ์นธ์€ ์ „๋ถ€ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค.

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•œ๋‹ค.

  1. ํ˜„์žฌ ์นธ์ด ์•„์ง ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํ˜„์žฌ ์นธ์„ ์ฒญ์†Œํ•œ๋‹ค.
  2. ํ˜„์žฌ ์นธ์˜ ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ด ์—†๋Š” ๊ฒฝ์šฐ,
    1. ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ํ•œ ์นธ ํ›„์ง„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•œ ์นธ ํ›„์ง„ํ•˜๊ณ  1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.
    2. ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์˜ ๋’ค์ชฝ ์นธ์ด ๋ฒฝ์ด๋ผ ํ›„์ง„ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ž‘๋™์„ ๋ฉˆ์ถ˜๋‹ค.
  3. ํ˜„์žฌ ์นธ์˜ ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ,
    1. ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 90๋„ ํšŒ์ „ํ•œ๋‹ค.
    2. ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์„ ๊ธฐ์ค€์œผ๋กœ ์•ž์ชฝ ์นธ์ด ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ธ ๊ฒฝ์šฐ ํ•œ ์นธ ์ „์ง„ํ•œ๋‹ค.
    3. 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฐฉ์˜ ํฌ๊ธฐ N๊ณผ M์ด ์ž…๋ ฅ๋œ๋‹ค. (3≤N,M≤50)โ€Š ๋‘˜์งธ ์ค„์— ์ฒ˜์Œ์— ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์˜ ์ขŒํ‘œ ์™€ ์ฒ˜์Œ์— ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ d๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค. ๊ฐ€ 0์ธ ๊ฒฝ์šฐ ๋ถ์ชฝ, 1์ธ ๊ฒฝ์šฐ ๋™์ชฝ, 2์ธ ๊ฒฝ์šฐ ๋‚จ์ชฝ, 3์ธ ๊ฒฝ์šฐ ์„œ์ชฝ์„ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์…‹์งธ ์ค„๋ถ€ํ„ฐ ๊ฐœ์˜ ์ค„์— ๊ฐ ์žฅ์†Œ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ์˜ ๊ฐ’์ด ํ•œ ์ค„์— ๊ฐœ์”ฉ ์ž…๋ ฅ๋œ๋‹ค. ๋ฒˆ์งธ ์ค„์˜ ๋ฒˆ์งธ ๊ฐ’์€ ์นธ ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ ๊ฐ€ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ ์นธ์ด๊ณ , 1์ธ ๊ฒฝ์šฐ ์— ๋ฒฝ์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐฉ์˜ ๊ฐ€์žฅ ๋ถ์ชฝ, ๊ฐ€์žฅ ๋‚จ์ชฝ, ๊ฐ€์žฅ ์„œ์ชฝ, ๊ฐ€์žฅ ๋™์ชฝ ์ค„ ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์— ์œ„์น˜ํ•œ ๋ชจ๋“  ์นธ์—๋Š” ๋ฒฝ์ด ์žˆ๋‹ค. ๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์žˆ๋Š” ์นธ์€ ํ•ญ์ƒ ๋นˆ ์นธ์ด๋‹ค.

์ถœ๋ ฅ

๋กœ๋ด‡ ์ฒญ์†Œ๊ธฐ๊ฐ€ ์ž‘๋™์„ ์‹œ์ž‘ํ•œ ํ›„ ์ž‘๋™์„ ๋ฉˆ์ถœ ๋•Œ๊นŒ์ง€ ์ฒญ์†Œํ•˜๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

** ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์€ ์ฝ”๋“œ์˜ ์ฃผ์„์„ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌํ˜„ ์‹œ๊ฐ„

0ms

#include <iostream>
using namespace std;

int main() 
{
	int N, M;
	int row, clm;	// ํ˜„์žฌ ํ–‰/์—ด ์œ„์น˜
	int dir;	// 0: ์œ„(๋ถ์ชฝ), 1: ์šฐ(๋™์ชฝ), 2: ์•„๋ž˜(๋‚จ์ชฝ), 3: ์ขŒ(์„œ์ชฝ)
	int dx[] = {0, 1, 0, -1};
	int dy[] = {-1, 0, 1, 0};
	int room[51][51];	// 0: ์ฒญ์†ŒX, 1: ๋ฒฝ, 2: ์ฒญ์†ŒO
	int clean = 0;

	cin >> N >> M;
	cin >> row >> clm >> dir;

	for (int n = 0; n < N; n++) {
		for (int m = 0; m < M; m++) {
			cin >> room[n][m];
		}
	}

	while (1) {
		if (room[row][clm] == 0) {	// ํ˜„์žฌ ์นธ ์ฒญ์†Œ ์•ˆ๋œ ๊ฒฝ์šฐ ์ฒญ์†Œ
			room[row][clm] = 2;
			clean++;
		}
		else{
			int i;
			for (i = 0; i < 4; i++) { // ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ์นธ ํ™•์ธ
				if (room[row + dy[(dir + i) % 4]][clm + dx[(dir + i) % 4]] == 0) {
					break;
				}
			}

			if (i == 4) {	// ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ์นธ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋’ค๋กœ ์ด๋™
				row -= dy[dir];
				clm -= dx[dir];
				if (room[row][clm] == 1) {	// ๋”์ด์ƒ ๋’ค๋กœ ๊ฐˆ๋ฐ ์—†์œผ๋ฉด ๋
					break;
				}
			}
			else {	// ์ฃผ๋ณ€ 4์นธ ์ค‘ ์ฒญ์†Œ๋˜์ง€ ์•Š์€ ๋นˆ์นธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
				do {
					dir = (dir + 3) % 4;	// ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ 90๋„ ํšŒ์ „
				} while (room[row + dy[dir]][clm + dx[dir]] != 0);
				row += dy[dir];
				clm += dx[dir];
				room[row][clm] = 2;
				clean++;
			}
		}
	}
	
	cout << clean;

	return 0;
}