์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋ฐฑ์ค€(BOJ)] 14499๋ฒˆ: ์ฃผ์‚ฌ์œ„ ๊ตด๋ฆฌ๊ธฐ(C++)

PROGRAMMING/Algorithm

by koharin 2025. 3. 12. 23:49

๋ณธ๋ฌธ

728x90
๋ฐ˜์‘ํ˜•

๐Ÿค” command์— ๋”ฐ๋ฅธ ์ขŒํ‘œ ์ด๋™ ๊ตฌํ˜„

int dx[]={0,0,0,-1,1};
int dy[]={0,1,-1,0,0};

vector< vector<int> > v(N, vector<int>(M,0));
int cur_x=x, cur_y=y;
vector<int> command(K);
for(int i=0; i<K; i++) cin >> command[i];
for(int i=0; i<K; i++){
        // ํ˜„์žฌ ์ง€๋„์—์„œ ์œ„์น˜
        int n_x=cur_x+dx[command[i]];
        int n_y=cur_y+dy[command[i]];
        
        if(n_x<0 || n_y<0 || n_x>=N || n_y>=M) continue;

๋™(0,1), ์„œ(0,-1), ๋ถ(-1,0), ๋‚จ(1,0)์€ command์— ๋”ฐ๋ผ ๊ฐ๊ฐ 1,2,3,4์— ํ•ด๋‹นํ•˜๋ฏ€๋กœ, dx[], dy[] ์ธ๋ฑ์Šค์—๋„ ๋™์ผํ•˜๊ฒŒ ์ €์žฅํ•œ๋‹ค.

๊ทธ๋Ÿผ command[i]๋งˆ๋‹ค dx[command[i]], dy[command[i]]๋ฅผ ํ˜„์žฌ์—์„œ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๋™ํ•œ ํ›„์˜ ์ขŒํ‘œ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ์ด๋™ํ•œ ํ›„์˜ ์ขŒํ‘œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ถœ๋ ฅํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค์Œ command๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก continue๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿค” ์ฃผ์‚ฌ์œ„ ์ด๋™ ๊ตฌํ˜„

int dice[6]={0,}; // ์œ„, ์•„๋ž˜, ๋™, ์„œ , ๋ถ, ๋‚จ

        int temp=dice[0];
        // ์ฃผ์‚ฌ์œ„ ์ด๋™
        switch(command[i]){
            case 1: // ๋™์œผ๋กœ ์ด๋™
            //cout << "command 1" << endl;
                
                dice[0]=dice[3];//์œ„->์„œ๊ฐ’
                dice[3]=dice[1];//์„œ->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[2];//๋ฐ”๋‹ฅ->๋™๊ฐ’
                dice[2]=temp;//๋™->์œ„๊ฐ’
                
                // ๋ถ,๋‚จ ๋ณ€ํ™” ์—†์Œ
            break;
            case 2: // ์„œ๋กœ ์ด๋™
                //cout << "command 2" << endl;
                
                dice[0]=dice[2];//์œ„->๋™๊ฐ’
                dice[2]=dice[1];//๋™->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[3];//๋ฐ”๋‹ฅ->์„œ๊ฐ’
                dice[3]=temp;//์„œ->์œ„๊ฐ’
                // ๋ถ,๋‚จ ๋ณ€ํ™” ์—†์Œ
            break;
            case 3: // ๋ถ์œผ๋กœ ์ด๋™
                //cout << "command 3" << endl;
                
                dice[0]=dice[5]; // ์œ„->๋‚จ๊ฐ’ 
                dice[5]=dice[1]; // ๋‚จ->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[4]; // ๋ฐ”๋‹ฅ->๋ถ๊ฐ’
                dice[4]=temp; // ๋ถ->์œ„๊ฐ’
                //๋™,์„œ ๋ณ€ํ™” ์—†์Œ                
            break;
            case 4: // ๋‚จ์œผ๋กœ ์ด๋™
                //cout << "command 4" << endl;
                // ๋™,์„œ ๋ณ€ํ™” ์—†์Œ
                
                dice[0]=dice[4]; //์œ„->๋ถ๊ฐ’
                dice[4]=dice[1];//๋ถ->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[5]; // ๋ฐ”๋‹ฅ->๋‚จ๊ฐ’
                dice[5]=temp; // ๋‚จ->์œ„๊ฐ’
            break;
        }

6๋ฉด์˜ ์ฃผ์‚ฌ์œ„๋ฅผ ํฌ๊ธฐ๊ฐ€ 6์ธ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•˜๊ณ , 0๋ถ€ํ„ฐ 5๋Š” ๊ฐ๊ฐ ์œ„, ์•„๋ž˜, ๋™, ์„œ, ๋ถ, ๋‚จ์œผ๋กœ ์ง€์ •ํ•œ๋‹ค.

์ดํ›„ ์ขŒํ‘œ ๊ณ„์‚ฐ ํ›„ command๋กœ ์ด๋™ํ•จ์— ๋”ฐ๋ผ ๋ณ€ํ•˜๋Š” ์ฃผ์‚ฌ์œ„ ์œ„์น˜์—์„œ์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์ค€๋‹ค.

 

๐Ÿค”  ์ขŒํ‘œ๊ฐ’ ๋ฐ ์ฃผ์‚ฌ์œ„๊ฐ’ ๊ฐฑ์‹ , command ์ˆ˜ํ–‰ ํ›„ ์ฃผ์‚ฌ์œ„ ์œ— ๋ฉด์— ์“ฐ์ธ ์ˆ˜ ์ถœ๋ ฅ

        // ์ด๋™ํ•œ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ 0์ด๋ฉด
        if(v[n_x][n_y]==0) v[n_x][n_y]=dice[1]; // ๋ฐ”๋‹ฅ์— ์จ์žˆ๋Š” ๊ฐ’ ์ง€๋„์— ๋ณต์‚ฌ
        else {
            dice[1]=v[n_x][n_y]; // ์ฃผ์‚ฌ์œ„ ๋ฐ”๋‹ฅ์— ํ˜„์žฌ ์ขŒํ‘œ์—์„œ์˜ ๊ฐ’ ์ ๊ธฐ
            v[n_x][n_y]=0; // ํ˜„์žฌ ์ขŒํ‘œ์˜ ๊ฐ’์€ 0์œผ๋กœ 
        }
        // ์ด๋™ํ•œ ์ขŒํ‘œ๋กœ ํ˜„์žฌ ์ขŒํ‘œ ์—…๋ฐ์ดํŠธ
        cur_x=n_x;
        cur_y=n_y;
        cout << dice[0] << endl; // ์ฃผ์‚ฌ์œ„ ์œ— ๋ฉด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜ ์ถœ๋ ฅ

๋งŒ์•ฝ ์ขŒํ‘œ์— ์“ฐ์ธ ๊ฐ’์ด 0์ด๋ผ๋ฉด ์ฃผ์‚ฌ์œ„ ๋ฐ”๋‹ฅ ๊ฐ’(dice[1])์„ ์ง€๋„์— ๋ณต์‚ฌํ•œ๋‹ค.

์ง€๋„ ์ƒ ํ˜„์žฌ ์ขŒํ‘œ์— ๊ฐ’์ด ์“ฐ์—ฌ์žˆ์œผ๋ฉด, ์ฃผ์‚ฌ์œ„ ๋ฐ”๋‹ฅ์—(dice[1])์— ๋ณต์‚ฌํ•œ๋‹ค.

 

์ฃผ์‚ฌ์œ„๋งŒ ์ž˜ ํ‘œํ˜„ํ•œ๋‹ค๋ฉด ๋กœ์ง์€ ์–ด๋ ต์ง€ ์•Š์€ ๋ฌธ์ œ์˜€๋‹ค.

 

๐Ÿ“  ์ „์ฒด ์ฝ”๋“œ

#include <iostream>
#include <vector>

using namespace std;

int dx[]={0,0,0,-1,1};
int dy[]={0,1,-1,0,0};

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int N,M,x,y,K;
    cin >> N >> M >> x >> y >> K;
    vector< vector<int> > v(N, vector<int>(M,0));
    for(int i=0; i<N; i++){
        for(int j=0; j<M; j++) cin >> v[i][j];
    }
    int cur_x=x, cur_y=y;
    
    // ์ฃผ์‚ฌ์œ„ ์ดˆ๊ธฐํ™”
    int dice[6]={0,}; // ์œ„, ์•„๋ž˜, ๋™, ์„œ , ๋ถ, ๋‚จ
    vector<int> command(K);
    for(int i=0; i<K; i++) cin >> command[i];
    for(int i=0; i<K; i++){
        // ํ˜„์žฌ ์ง€๋„์—์„œ ์œ„์น˜
        int n_x=cur_x+dx[command[i]];
        int n_y=cur_y+dy[command[i]];
        
        if(n_x<0 || n_y<0 || n_x>=N || n_y>=M) continue;
        int temp=dice[0];
        // ์ฃผ์‚ฌ์œ„ ์ด๋™
        switch(command[i]){
            case 1: // ๋™์œผ๋กœ ์ด๋™
            //cout << "command 1" << endl;
                
                dice[0]=dice[3];//์œ„->์„œ๊ฐ’
                dice[3]=dice[1];//์„œ->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[2];//๋ฐ”๋‹ฅ->๋™๊ฐ’
                dice[2]=temp;//๋™->์œ„๊ฐ’
                
                // ๋ถ,๋‚จ ๋ณ€ํ™” ์—†์Œ
            break;
            case 2: // ์„œ๋กœ ์ด๋™
                //cout << "command 2" << endl;
                
                dice[0]=dice[2];//์œ„->๋™๊ฐ’
                dice[2]=dice[1];//๋™->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[3];//๋ฐ”๋‹ฅ->์„œ๊ฐ’
                dice[3]=temp;//์„œ->์œ„๊ฐ’
                // ๋ถ,๋‚จ ๋ณ€ํ™” ์—†์Œ
            break;
            case 3: // ๋ถ์œผ๋กœ ์ด๋™
                //cout << "command 3" << endl;
                
                dice[0]=dice[5]; // ์œ„->๋‚จ๊ฐ’ 
                dice[5]=dice[1]; // ๋‚จ->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[4]; // ๋ฐ”๋‹ฅ->๋ถ๊ฐ’
                dice[4]=temp; // ๋ถ->์œ„๊ฐ’
                //๋™,์„œ ๋ณ€ํ™” ์—†์Œ                
            break;
            case 4: // ๋‚จ์œผ๋กœ ์ด๋™
                //cout << "command 4" << endl;
                // ๋™,์„œ ๋ณ€ํ™” ์—†์Œ
                
                dice[0]=dice[4]; //์œ„->๋ถ๊ฐ’
                dice[4]=dice[1];//๋ถ->๋ฐ”๋‹ฅ๊ฐ’
                dice[1]=dice[5]; // ๋ฐ”๋‹ฅ->๋‚จ๊ฐ’
                dice[5]=temp; // ๋‚จ->์œ„๊ฐ’
            break;
        }
        // ์ด๋™ํ•œ ์นธ์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜๊ฐ€ 0์ด๋ฉด
        if(v[n_x][n_y]==0) v[n_x][n_y]=dice[1]; // ๋ฐ”๋‹ฅ์— ์จ์žˆ๋Š” ๊ฐ’ ์ง€๋„์— ๋ณต์‚ฌ
        else {
            dice[1]=v[n_x][n_y]; // ์ฃผ์‚ฌ์œ„ ๋ฐ”๋‹ฅ์— ํ˜„์žฌ ์ขŒํ‘œ์—์„œ์˜ ๊ฐ’ ์ ๊ธฐ
            v[n_x][n_y]=0; // ํ˜„์žฌ ์ขŒํ‘œ์˜ ๊ฐ’์€ 0์œผ๋กœ 
        }
        // ์ด๋™ํ•œ ์ขŒํ‘œ๋กœ ํ˜„์žฌ ์ขŒํ‘œ ์—…๋ฐ์ดํŠธ
        cur_x=n_x;
        cur_y=n_y;
        cout << dice[0] << endl; // ์ฃผ์‚ฌ์œ„ ์œ— ๋ฉด์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆ˜ ์ถœ๋ ฅ
    }
    return 0;
}

 

๐Ÿ“  ์ œ์ถœ ๊ฒฐ๊ณผ

728x90
๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ