1. ๋ฌธ์ ์ ๋ํ์ฌ ๐ฆ
- ๋ฌธ์ ๋งํฌ: https://www.acmicpc.net/problem/14891
(1) ์กฐ๊ฑด ๋ถ์ ๐
- ๋ ์ด 8๊ฐ์ธ ํฑ๋๋ฐํด๊ฐ 4๊ฐ ์กด์ฌํ๊ณ , ๋ ๋ง๋ค N๊ทน, S๊ทน์ด ์๋ค.
- ํด๋น ํฑ๋๋ฐํด๋ค์ ํก์ผ๋ก ๋์ด๋์ด ์๊ณ , ์๋ก์ 3์์ 9์ ๋ ์ ๊ทน์ด ์๋ก์๊ฒ ์ํฅ์ ์ค๋ค.
- ํ์ฌ ๋ด๊ฐ ์กฐํ ์ค์ธ ํฑ๋ ์ 3์์ ๊ทธ๊ฒ์ ์ค๋ฅธ์ชฝ ํฑ๋ ์ 9์๊ฐ ์๋ก ์ ์๊ทน ์ํฅ์ ๋ฐ๋๋ค.
- ํ์ฌ ๋ด๊ฐ ์กฐํ ์ค์ธ ํฑ๋ ์ 9์์ ๊ทธ๊ฒ์ ์ผ์ชฝ ํฑ๋ ์ 3์๊ฐ ์๋ก ์ ์๊ทน ์ํฅ์ ๋ฐ๋๋ค.
- ํน์ ํฑ๋๋ฐํด๋ ์๊ณ๋ฐฉํฅ, ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก ํ์ ํ ์ ์๋ค. ํ ๋ฒ์ ํ์ ๋น ๋ ์ด ํ ๋ฒ ์์น๋ฅผ ๋ฐ๊พผ๋ค.
- ํฑ๋๋ฐํด๊ฐ ํ์ ํ๋ฉด, ๊ทธ๊ฒ๊ณผ ์ํฅ์ ๋ฐ๋ ์ด์ ํฑ๋๋ฐํด๊ฐ ์๋ก 3์, 9์ ๋ฐฉํฅ์์ ์ ์๊ทน์ด ๋ค๋ฅด๋ฉด, ์ด์ ๋ฐ๋ ํฑ๋๋ฐํด๋ ๋ฐ๋๋ก ๋์๊ฐ๋ค.
(๋ฌธ์ ๊ทธ๋ฆผ ํ์ธ ๋ฐ๋)
2. ์ฝ๋๊ฐ ๋์ค๊ธฐ๊น์ง ๐ ๏ธ
KEY WORD: ์๋ฎฌ๋ ์ด์
, ์ฌ๊ท
- ํ์ฌ ๋๋ ค์ผํ ํฑ๋๋ฐํด์ ์ด์ ๋ฐํด๋ค์ด ์ ์๊ทน์ ๋ฐ์ ๋ฐ๋๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋์ง ์ฒดํฌํ๋ค.
- ์ด๋ ๊ธฐ๊ณ์ ์ผ๋ก ์ด์๋ง ์ฒดํฌํ๋ฉด ์๋๋ค. ์ด์ ํฑ๋๋ฐํด๊ฐ ๋๋ค๋ฉด, ๊ทธ๊ฒ์ ์ด์๋ค ๋ํ ๊ทธ ์ํฅ์ ๋ฐ์ ๋์๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์
์ฌ๊ท๋ก ์ฒซ ์กฐํ ํฑ๋๋ฐํด ๋ถํฐ ๊ทธ๊ฒ์ ์ด์ ํฑ๋๋ฐํด๋ค์ ์ด์์ด ๋ ์ด์ ์ ๋์๊ฐ ๋๊น์ง ํ์ธํ๋ค.
- ์ด๋ ๊ธฐ๊ณ์ ์ผ๋ก ์ด์๋ง ์ฒดํฌํ๋ฉด ์๋๋ค. ์ด์ ํฑ๋๋ฐํด๊ฐ ๋๋ค๋ฉด, ๊ทธ๊ฒ์ ์ด์๋ค ๋ํ ๊ทธ ์ํฅ์ ๋ฐ์ ๋์๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์
- 1๋ฒ์ ํ๋ฉฐ, ๊ฐ ํฑ๋๋ฐํด๊ฐ ๋์๊ฐ ๋ฐฉํฅ์ ๊ธฐ๋กํด๋๋ค. ์ดํ ํด๋น ๋ฐฉํฅ์ ๋ง๊ฒ ๊ฐ๊ฐ ๋๋ฆฐ๋คใ .
- ์ด๊ฒ์ R๋ฒ ๋ฐ๋ณตํ๊ณ ์ ์ ๊ณ์ฐ
(1) ์๊ฐ๋ณต์ก๋ ๋ถ์ โณ
- ํฑ๋๋ฐํด๊ฐ 4๊ฐ๋ก ๊ณ ์ , ํ์ ๋ ์ต๋ 100๋ฒ ์ด๋ฏ๋ก, ์ฌ๊ท๋ฅผ ์จ๋ ๋ฌธ์ ์์ ๋ฏ ํ๋ค.
3. ์ฝ๋ ๐
import java.util.*;
import java.io.*;
public class Main {
static int [][] wheels = new int [4][8];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for(int i = 0; i < 4; i++){
String row = br.readLine();
for(int j = 0; j < 8; j++) {
wheels[i][j] = row.charAt(j) - 48;
}
}
int R = Integer.parseInt(br.readLine());
for(int i = 0; i < R; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken()) - 1;
int dir = Integer.parseInt(st.nextToken());
calculate(num, dir);
}
int sum = 0;
if(wheels[0][0] == 1) sum += 1;
if(wheels[1][0] == 1) sum += 2;
if(wheels[2][0] == 1) sum += 4;
if(wheels[3][0] == 1) sum += 8;
System.out.println(sum);
}
public static void calculate(int num, int dir) {
int [] rotateDir = new int [4];
checkNS(rotateDir, num, dir); // ๊ทน์ด ๋ค๋ฅธ์ง ํ์ธ
for(int i = 0; i < 4; i++){
if(rotateDir[i] != 0) rotate(i, rotateDir[i]);
}
}
public static void checkNS(int [] rotateDir, int num, int dir) {
if(num < 0 || num >= 4) return;
rotateDir[num] = dir;
if(num - 1 >= 0 && wheels[num-1][2] != wheels[num][6] && rotateDir[num - 1] == 0) {
checkNS(rotateDir, num - 1, dir == 1 ? -1 : 1);
}
if(num + 1 < 4 && wheels[num][2] != wheels[num+1][6] && rotateDir[num+1] == 0) {
checkNS(rotateDir, num + 1, dir == 1? -1 : 1);
}
}
public static void rotate(int num, int dir){
if(dir == 1) {
int temp = wheels[num][7];
int iter = 6;
while(iter >= 0){
wheels[num][iter+1] = wheels[num][iter];
iter--;
}
wheels[num][0] = temp;
}
if(dir == -1) {
int temp = wheels[num][0];
int iter = 1;
while (iter < 8) {
wheels[num][iter-1] = wheels[num][iter];
iter++;
}
wheels[num][7] = temp;
}
}
}
4. ํธ๋ฌ๋ธ ์ํ or ๋ฐฐ์ด ์ ๐
ํ ๋ฒ์ ๋ชป ํผ ์ด์
- (1) ์ ํ ์๊ฐ ์ํจ.
:์ด์์ด ๋๋ฉด, ๊ทธ๊ฒ์ ์ด์๋ ์กฐ๊ฑด๋ง ๋ง์ผ๋ฉด ๋ ์ ์๋ค๋ ๊ฒ์ ์๊ฐ ์ํจ. - (2) ์ด์์ ์๋ณธ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ค๋ ๊ฒ์ ๊ฐ๊ณผ
0