๐Ÿ“ฆ Chango/๐Ÿฃ EDOC

[BOJ G5][C++] ๋ฐฑ์ค€ 14891๋ฒˆ: ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

์„ ๋‹ฌ 2021. 9. 8. 03:53
๋ฐ˜์‘ํ˜•

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

 

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

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

www.acmicpc.net

 

๋ฌธ์ œ

์ด 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์ 

 

ํ’€์ด

#include <iostream>
#include <stdio.h>

using namespace std;

void counterclockwise(int arr[]);
void clockwise(int arr[]);

void turn(int arr[], bool dir);

void cycle(int arr[][8]);

int gear[4][8], k;

int main() {
    
    //์ž…๋ ฅ
    for(int i=0; i<4; i++){ //ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์ž…๋ ฅ๋ฐ›๊ธฐ
        for(int j=0; j<8; j++){
            scanf("%1d", &gear[i][j]);
        }
    }
    cin >> k;
    
    
    //๊ณ„์‚ฐ
    for(int i=0; i<k; i++){
        cycle(gear);
    }

    
    //์ถœ๋ ฅ
    int ans = 0, score = 1;
    for(int i=0; i<4; i++){
        if(gear[i][0] == 1){
            ans += score;
        }
        score *= 2;
    }

    cout << ans;
    
    return 0;
}

void cycle(int arr[][8]){
    
    //๊ด€๊ณ„ ์„ค์ •
    bool relation[3] = {true, true, true};

    if(gear[0][2] == gear[1][6]){   //1๋ฒˆํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ 2๋ฒˆํ†ฑ๋‹ˆ๋ฐ”ํ€ด
        relation[0] = false;
    }
    if(gear[1][2] == gear[2][6]){   //2๋ฒˆํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ 3๋ฒˆํ†ฑ๋‹ˆ๋ฐ”ํ€ด
        relation[1] = false;
    }
    if(gear[2][2] == gear[3][6]){   //3๋ฒˆํ†ฑ๋‹ˆ๋ฐ”ํ€ด์™€ 4๋ฒˆํ†ฑ๋‹ˆ๋ฐ”ํ€ด
        relation[2] = false;
    }

    //๋ณธ๊ฒฉ์ ์ธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋Œ๋ฆฌ๊ธฐ ์‹œ์ž‘
    int a, b; bool dir;
    cin >> a >> b;  //a: ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฒˆํ˜ธ, b: ๋ฐฉํ–ฅ
    
    if(b == 1){
        dir = true; //์‹œ๊ณ„
    }
    else{
        dir = false;    //๋ฐ˜์‹œ๊ณ„
    }
    
    //1๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋Œ๋ฆด๋•Œ
    if(a==1){
        turn(gear[0], dir);
        if(relation[0] == true){
            turn(gear[1], !(dir));
            if(relation[1] == true){
                turn(gear[2], dir);
                if(relation[2] == true){
                    turn(gear[3], !(dir));
                }
            }
        }
    }
    
    //2๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋Œ๋ฆด๋–„
    else if(a==2){
        turn(gear[1],dir);
        if(relation[0]==1){
            turn(gear[0], !(dir));
        }
        if(relation[1] == true){
            turn(gear[2], !(dir));
            if(relation[2] == true){
                turn(gear[3], dir);
            }
        }
    }
    
    //3๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋Œ๋ฆด๋–„
    else if(a==3){
        turn(gear[2], dir);
        if(relation[2] == true){
            turn(gear[3], !(dir));
        }
        if(relation[1] == true){
            turn(gear[1], !(dir));
            if(relation[0] == true){
                turn(gear[0], dir);
            }
        }
    }
    
    //4๋ฒˆ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋Œ๋ฆด๋•Œ
    if(a==4){
        turn(gear[3], dir);
        if(relation[2] == true){
            turn(gear[2], !(dir));
            if(relation[1] == true){
                turn(gear[1], dir);
                if(relation[0] == true){
                    turn(gear[0], !(dir));
                }
            }
        }
    }
}



void turn(int arr[], bool dir){
    if(dir == 1){
        clockwise(arr);
    }
    else if(dir == 0){
        counterclockwise(arr);
    }
}



void counterclockwise(int arr[]){
    
    int tmp = arr[0];
    
    for(int i=0; i<7; i++){
        arr[i] = arr[i+1];
    }
    
    arr[7] = tmp;
    
}

void clockwise(int arr[]){
    
    int tmp = arr[7];
    
    for(int i=7; i>0; i--){
        arr[i] = arr[i-1];
    }
    
    arr[0] = tmp;
    
}

์ฝ”๋“œ๊ธธ์ด ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

ํ•˜๋‚˜ ํ‘ธ๋Š”๋ฐ 2์‹œ๊ฐ„ 40๋ถ„ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

์•„ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

์•ˆ์›ƒ๊ฒจ.

 

TIL

- ์ˆ˜๋ฅผ ๋ฌธ์ž์—ด ์ฒ˜๋Ÿผ ์ˆซ์ž ํ•˜๋‚˜์”ฉ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ธฐ

for(int i=0; i<4; i++){ //ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์ž…๋ ฅ๋ฐ›๊ธฐ
        for(int j=0; j<8; j++){
            scanf("%1d", &gear[i][j]);
        }
    }

์ด๊ฑธ.. ๊ทธ๋™์•ˆ ๋ชฐ๋ผ์„œ.. int๋กœ ๋ฐ›์•„์„œ... ์ž๋ฆฟ์ˆ˜ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ถ„๋ฆฌํ•˜๊ณ .. ใ… ใ… ใ… ใ… ใ… ใ… 

+) ์‹ค๋ ฅ์ด ์—†์œผ๋ฉด ๋ฌธ์ œํ•˜๋‚˜๋ฅผ ํ‘ธ๋Š”๋ฐ 2์‹œ๊ฐ„ 40๋ถ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•