๊ธฐ๋ก๋ฐฉ

BOJ_14 : ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋ณธ๋ฌธ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

BOJ_14 : ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

Soom_1n 2022. 6. 3. 18:12

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

14891๋ฒˆ: ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

์ฒซ์งธ ์ค„์— 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ๋‘˜์งธ ์ค„์— 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ์…‹์งธ ์ค„์— 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ, ๋„ท์งธ ์ค„์— 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ƒํƒœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ƒํƒœ๋Š” 8๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , 12์‹œ๋ฐฉํ–ฅ๋ถ€ํ„ฐ

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๋ฌธ์ œ๊ฐ€ ์ข€ ๊ธธ์—ˆ์ง€๋งŒ ์–ด๋ ค์šด ์กฐ๊ฑด์€ ์•„๋‹ˆ๋‹ค. 4๊ฐ€์ง€ ํ†ฑ๋‹ˆ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Œ๋ ธ์„๋•Œ ๋‹ค๋ฅธ ํ†ฑ๋‹ˆ ์ƒํƒœ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ฐ ํ†ฑ๋‹ˆ ์ƒํƒœ๋Š” vector ๋ฅผ ์“ฐ๋ฉด ๋  ๊ฒƒ ๊ฐ™๊ณ , ์˜† ํ†ฑ๋‹ˆ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒƒ์€ ๋งˆ์น˜ BFS์˜ ์›๋ฆฌ์™€ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์•„์„œ queue๋ฅผ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์‰ฝ๊ฒŒ ํ’€๋ ธ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

#include<iostream>
#include<string>
#include<vector>
#include<queue>

using namespace std;

void turn(vector<int>& top, int& direction) {
	int temp;
    	// turn right
	if (direction == 1) {	
		temp = top[7];
		for (int i = 7; i > 0; i--) {
			top[i] = top[i - 1];
		}
		top[0] = temp;
	}
    	// turn left
	else {					
		temp = top[0];
		for (int i = 0; i < 7; i++) {
			top[i] = top[i + 1];
		}
		top[7] = temp;
	}
}

int main(void) {

	string status;
	vector<vector<int>>top(4, vector<int>(8));

	for (int i = 0; i < 4; i++)
	{
		cin >> status;
		for (int j = 0; j < 8; j++)
		{
			top[i][j] = status[j] - '0';
		}
	}

	int K, Tnum, direction;
	cin >> K;
	queue<int> q;

	for (int i = 0; i < K; i++)
	{
		int flag[4] = { 0 };

		cin >> Tnum >> direction;
		q.push(Tnum - 1);
		flag[Tnum - 1] = direction;

		while (!q.empty()) {
			int now = q.front();
			int left = top[now][6];
			int right = top[now][2];

			turn(top[now], flag[now]);
			
			if (now - 1 >= 0) {		// ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์กด์žฌ
            		// ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ์•„์ง ๋Œ์•„๊ฐ€์ง€ ์•Š์•˜๊ณ , ์ ‘์ ์˜ ๊ทน์ด ๋ฐ˜๋Œ€
				if (flag[now - 1] == 0 && top[now - 1][2] != left) { 
					q.push(now - 1);
					flag[now - 1] = flag[now] * -1;
				}
			}
			if (now + 1 <= 3) {		// ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์กด์žฌ
            		// ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ์•„์ง ๋Œ์•„๊ฐ€์ง€ ์•Š์•˜๊ณ , ์ ‘์ ์˜ ๊ทน์ด ๋ฐ˜๋Œ€
				if (flag[now + 1] == 0 && top[now + 1][6] != right) { 
					q.push(now + 1);
					flag[now + 1] = flag[now] * -1;
				}
			}
			q.pop();
		}
	}

	int answer = 0;

	if (top[0][0] == 1) answer += 1;
	if (top[1][0] == 1) answer += 2;
	if (top[2][0] == 1) answer += 4;
	if (top[3][0] == 1) answer += 8;

	cout << answer;

	return 0;
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ํ†ฑ๋‹ˆ์˜ ์ƒํƒœ๋Š” vector ์˜ ์ค‘์ฒฉ์„ ์ด์šฉํ–ˆ๊ณ , ์˜† ํ†ฑ๋‹ˆ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ฒƒ์€ queue๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.
  • queue์˜ ์‚ฌ์šฉ์— ๋น ์ง€์ง€ ์•Š๋Š”... ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๋ฆฌ์ŠคํŠธ flag๋กœ ๋ฐฉํ–ฅ์„ ์ €์žฅํ–ˆ๋‹ค.
  • ํ†ฑ๋‹ˆ์˜ ํšŒ์ „์€ turn ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ†ฑ๋‹ˆ ๋ฒˆํ˜ธ์™€ ๋ฐฉํ–ฅ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„ ๋Œ๋ฆฌ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ฌธ์ œ ์ดํ•ด์™€ ํ’€์ด ์‹œ๊ฐ„์ด ๊ฑฐ์˜ ๋น„์Šทํ•˜๊ฒŒ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๊ณจ๋“œ 5 ๋ฌธ์ œ์˜€์ง€๋งŒ, vector์™€ queue์‚ฌ์šฉ์œผ๋กœ ์ƒ๊ฐ๋ณด๋‹ค ์•„์ฃผ ์‰ฝ๊ฒŒ ํ’€๋ ธ๋‹ค.
  • ์ž๋ฃŒํ˜•์„ ์ž˜ ์„ ํƒํ•œ ๊ฒฝ์šฐ์ธ ๊ฒƒ ๊ฐ™๋‹ค.
728x90