๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

๋ฐฑ์ค€ 14891๋ฒˆ : ํ†ฑ๋‹ˆ๋ฐ”ํ€ด with C++

๋ฌธ์ œ

์ด 8๊ฐœ์˜ ํ†ฑ๋‹ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด 4๊ฐœ๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ผ๋ ฌ๋กœ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋˜, ํ†ฑ๋‹ˆ๋Š” N๊ทน ๋˜๋Š” S๊ทน ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋Š”๋ฐ, ๊ฐ€์žฅ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ 1๋ฒˆ, ๊ทธ ์˜ค๋ฅธ์ชฝ์€ 2๋ฒˆ, ๊ทธ ์˜ค๋ฅธ์ชฝ์€ 3๋ฒˆ, ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 4๋ฒˆ์ด๋‹ค.

์ด๋•Œ, ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์ด K๋ฒˆ ํšŒ์ „์‹œํ‚ค๋ ค๊ณ  ํ•œ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ํšŒ์ „์€ ํ•œ ์นธ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ํšŒ์ „์€ ์‹œ๊ณ„ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด ์žˆ๊ณ , ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํšŒ์ „ํ•œ๋‹ค.

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ค๋ ค๋ฉด, ํšŒ์ „์‹œํ‚ฌ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ํšŒ์ „์‹œํ‚ฌ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•œ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ํšŒ์ „ํ•  ๋•Œ, ์„œ๋กœ ๋งž๋‹ฟ์€ ๊ทน์— ๋”ฐ๋ผ์„œ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๊ณ , ํšŒ์ „์‹œํ‚ค์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ํ†ฑ๋‹ˆ๋ฐ”ํ€ด A๋ฅผ ํšŒ์ „ํ•  ๋•Œ, ๊ทธ ์˜†์— ์žˆ๋Š” ํ†ฑ๋‹ˆ๋ฐ”ํ€ด B์™€ ์„œ๋กœ ๋งž๋‹ฟ์€ ํ†ฑ๋‹ˆ์˜ ๊ทน์ด ๋‹ค๋ฅด๋‹ค๋ฉด, B๋Š” A๊ฐ€ ํšŒ์ „ํ•œ ๋ฐฉํ–ฅ๊ณผ ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž.

๋‘ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์€ ์ดˆ๋ก์ƒ‰ ์ ์„ ์œผ๋กœ ๋ฌถ์—ฌ์žˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์—ฌ๊ธฐ์„œ, 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ–ˆ๋‹ค๋ฉด, 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” ๋งž๋‹ฟ์€ ๋ถ€๋ถ„์ด S๊ทน์œผ๋กœ ์„œ๋กœ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์—, ํšŒ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋˜๊ณ , 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋Š” 2๋ฒˆ์ด ํšŒ์ „ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—, ํšŒ์ „ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์„ ๋งŒ๋“ค๊ฒŒ ๋œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ์ƒํƒœ์—์„œ 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋ฉด, 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋˜๊ณ , 2๋ฒˆ์ด ํšŒ์ „ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, 3๋ฒˆ๋„ ๋™์‹œ์— ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•˜๊ฒŒ ๋œ๋‹ค. 4๋ฒˆ์€ 3๋ฒˆ์ด ํšŒ์ „ํ•˜์ง€๋งŒ, ๋งž๋‹ฟ์€ ๊ทน์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์ „ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

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

์ž…๋ ฅ

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

๋‹ค์„ฏ์งธ ์ค„์—๋Š” ํšŒ์ „ ํšŸ์ˆ˜ K(1 ≤ K ≤ 100)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ K๊ฐœ ์ค„์—๋Š” ํšŒ์ „์‹œํ‚จ ๋ฐฉ๋ฒ•์ด ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ฒซ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ํšŒ์ „์‹œํ‚จ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ๋ฒˆํ˜ธ, ๋‘ ๋ฒˆ์งธ ์ •์ˆ˜๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. ๋ฐฉํ–ฅ์ด 1์ธ ๊ฒฝ์šฐ๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๊ณ , -1์ธ ๊ฒฝ์šฐ๋Š” ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์ด๋‹ค.

์ถœ๋ ฅ

์ด K๋ฒˆ ํšŒ์ „์‹œํ‚จ ์ดํ›„์— ๋„ค ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์ ์ˆ˜์˜ ํ•ฉ์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ ์ˆ˜๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•œ๋‹ค.

  • 1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 1์ 
  • 2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 2์ 
  • 3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 4์ 
  • 4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ 12์‹œ๋ฐฉํ–ฅ์ด N๊ทน์ด๋ฉด 0์ , S๊ทน์ด๋ฉด 8์ 

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

์ž…๋ ฅ: ํ•˜๋‚˜์˜ ์ˆซ์ž๋งˆ๋‹ค ์ž…๋ ฅ๋ฐ›๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ scanf_s("%1d", &gear[i][j]);๋ฅผ ์ด์šฉ

* ์ฐธ๊ณ ๋กœ ๋ฐฑ์ค€์—์„  scanf_s ๋Œ€์‹  scanf๋กœ ์ฝ”๋“œ๋ฅผ ์ œ์ถœํ•ด์•ผ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์Œ!

 

1. ๊ฐ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๊ฐ€ ์‹œ๊ณ„๋ฐฉํ–ฅ(1)์œผ๋กœ ํšŒ์ „ํ•  ์ง€, ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ(-1)์œผ๋กœ ํšŒ์ „ํ•  ์ง€ gear_rotation ํ–‰๋ ฌ์— ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ ์–ธ

2. gear_rotation ๋ฅผ 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ ๋’ค ๊ฐ ํšŒ์ „๊ฒฝ์šฐ์—์„œ ๊ธฐ์ค€ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์˜ ์˜ค๋ฅธ์ชฝ ๋ฐ”ํ€ด๋“ค์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•  ์ง€, ์™ผ์ชฝ ๋ฐ”ํ€ด๋“ค์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•  ์ง€ Gear_Rotation_set ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ gear_rotation ํ–‰๋ ฌ์— ์ž…๋ ฅ

3. ๊ตฌํ•œ gear_rotation ํ–‰๋ ฌ์˜ ํšŒ์ „๋ฐฉํ–ฅ์— ์•Œ๋งž๊ฒŒ 4๊ฐœ์˜ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ Gear_Rotation ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํšŒ์ „์‹œํ‚ด

4. ์ฃผ์–ด์ง„ ํšŒ์ „ ํšŸ์ˆ˜ K๋งŒํผ ์œ„ 2~3์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณต

5. ๊ฑฐ๋“ญ์ œ๊ณฑ์„ ์ด์šฉํ•˜์—ฌ ์ ์ˆ˜ ๊ณ„์‚ฐ

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

0ms

#include <iostream>
#include <cmath>
using namespace std;

int gear[4][8];	// gear[ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋ฒˆํ˜ธ][0: N๊ทน, 1: S๊ทน]
int gear_rotation[4];

void CW(int i) {	// i๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์‹œ๊ณ„๋ฐฉํ–ฅ ํšŒ์ „
	int temp = gear[i][7];
	gear[i][7] = gear[i][6];
	gear[i][6] = gear[i][5];
	gear[i][5] = gear[i][4];
	gear[i][4] = gear[i][3];
	gear[i][3] = gear[i][2];
	gear[i][2] = gear[i][1];
	gear[i][1] = gear[i][0];
	gear[i][0] = temp;
}

void CCW(int i) {	// i๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์‹œ๊ณ„๋ฐ˜๋Œ€๋ฐฉํ–ฅ ํšŒ์ „
	int temp = gear[i][0];
	gear[i][0] = gear[i][1];
	gear[i][1] = gear[i][2];
	gear[i][2] = gear[i][3];
	gear[i][3] = gear[i][4];
	gear[i][4] = gear[i][5];
	gear[i][5] = gear[i][6];
	gear[i][6] = gear[i][7];
	gear[i][7] = temp;
}

void gear_rotation_init() {
	for (int i = 0; i < 4; i++) {
		gear_rotation[i] = 0;
	}
}

void Gear_Rotation_set(int gear_num, int dir) {
	gear_rotation[gear_num] = dir;
	int init_gear_num = gear_num;

	while (gear_num >= 0 && gear_num < 3) {	// ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๋น„๊ต
		if (gear[gear_num][2] != gear[gear_num + 1][6])
		{	// ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๊ทน์„ฑ์ด ๋‹ค๋ฅผ ์‹œ
			if (gear_rotation[gear_num] == 1) {
				gear_rotation[gear_num + 1] = -1;
			}
			else if (gear_rotation[gear_num] == -1) {
				gear_rotation[gear_num + 1] = 1;
			}
			gear_num++;
		}
		else {	// ๊ทน์„ฑ์ด ๊ฐ™์„ ์‹œ ์˜ค๋ฅธ์ชฝ ๋” ํ™•์ธํ•  ํ•„์š”์—†์œผ๋‹ˆ ๋น ์ ธ๋‚˜์˜ด
			break;
		}
	}

	gear_num = init_gear_num;
	while (gear_num > 0 && gear_num < 4) {	// ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๋น„๊ต
		if (gear[gear_num][6] != gear[gear_num - 1][2])
		{	// ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ ๊ทน์„ฑ์ด ๋‹ค๋ฅผ ์‹œ
			if (gear_rotation[gear_num] == 1) {
				gear_rotation[gear_num - 1] = -1;
			}
			else if (gear_rotation[gear_num] == -1) {
				gear_rotation[gear_num - 1] = 1;
			}
			gear_num--;
		}
		else {	// ๊ทน์„ฑ์ด ๊ฐ™์„ ์‹œ ์™ผ์ชฝ ๋” ํ™•์ธํ•  ํ•„์š”์—†์œผ๋‹ˆ ๋น ์ ธ๋‚˜์˜ด
			break;
		}
	}
}

void Gear_Rotation() {
	for (int i = 0; i < 4; i++) {
		if (gear_rotation[i] == 1) {
			CW(i);
		}
		else if (gear_rotation[i] == -1) {
			CCW(i);
		}
	}
}

int main() 
{
	int K;
	int R[101][2];

	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 8; j++) {
			scanf_s("%1d", &gear[i][j]);
		}
	}

	cin >> K;

	for (int i = 0; i < K; i++) {
		for (int j = 0; j < 2; j++) {
			cin >> R[i][j];
		}
	}

	for (int k = 0; k < K; k++) {
		gear_rotation_init();
		Gear_Rotation_set(R[k][0] - 1, R[k][1]);
		Gear_Rotation();
	}

	int score = 0;
	for (int i = 0; i < 4; i++) {
		if (gear[i][0] == 1) {
			score += pow(2, i);
		}
	}

	cout << score;

	return 0;
}