๐Ÿ•๏ธ ICPC Sinchon

[C++][BOJ] ๋ฐฑ์ค€ 2210๋ฒˆ: ์ˆซ์žํŒ ์ ํ”„

์„ ๋‹ฌ 2021. 8. 18. 15:10
๋ฐ˜์‘ํ˜•

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

 

2210๋ฒˆ: ์ˆซ์žํŒ ์ ํ”„

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋“ค์ด๋‹ค.

www.acmicpc.net

๋ฌธ์ œ

5×5 ํฌ๊ธฐ์˜ ์ˆซ์žํŒ์ด ์žˆ๋‹ค. ๊ฐ๊ฐ์˜ ์นธ์—๋Š” ์ˆซ์ž(digit, 0๋ถ€ํ„ฐ 9๊นŒ์ง€)๊ฐ€ ์ ํ˜€ ์žˆ๋‹ค. ์ด ์ˆซ์žํŒ์˜ ์ž„์˜์˜ ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•ด์„œ, ์ธ์ ‘ํ•ด ์žˆ๋Š” ๋„ค ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์„ฏ ๋ฒˆ ์ด๋™ํ•˜๋ฉด์„œ, ๊ฐ ์นธ์— ์ ํ˜€์žˆ๋Š” ์ˆซ์ž๋ฅผ ์ฐจ๋ก€๋กœ ๋ถ™์ด๋ฉด 6์ž๋ฆฌ์˜ ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ด๋™์„ ํ•  ๋•Œ์—๋Š” ํ•œ ๋ฒˆ ๊ฑฐ์ณค๋˜ ์นธ์„ ๋‹ค์‹œ ๊ฑฐ์ณ๋„ ๋˜๋ฉฐ, 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” 000123๊ณผ ๊ฐ™์€ ์ˆ˜๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ˆซ์žํŒ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์—ฌ์„ฏ ์ž๋ฆฌ์˜ ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

๋‹ค์„ฏ ๊ฐœ์˜ ์ค„์— ๋‹ค์„ฏ ๊ฐœ์˜ ์ •์ˆ˜๋กœ ์ˆซ์žํŒ์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int arr[5][5];	//์ฃผ์–ด์ง„ ๋ฐฐ์—ด
int move_ij[4][2] = {{0,-1}, {0,1}, {-1,0}, {1,0}}; //์›€์ง์ด๋Š” ์นธ์˜ ์ˆ˜๋ฅผ ์ •ํ•ด์ฃผ๋Š” ๋ฐฐ์—ด
vector <int> v;	//๋งŒ๋“ค์–ด์ง„ 6์ž๋ฆฌ ์ˆ˜๋“ค์„ ๋„ฃ์„ ๋ฒกํ„ฐ

void move (int repeat_num, int i, int j, int num){ //์ธ์ ‘ํ•œ ์นธ์œผ๋กœ ์ด๋™ํ•˜๋Š” ํ•จ์ˆ˜
    
    if(repeat_num == 5){	//5๋ฒˆ๋ฐ˜๋ณตํ•˜๋ฉด(=6์ž๋ฆฌ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉด) ์ˆ˜๋ฅผ ๋ฒกํ„ฐ์— ๋„ฃ๊ณ  ๋ฐ˜๋ณต ์ข…๋ฃŒ
        v.push_back(num);
        return;
    }
    
    for(int k=0; k<4; k++){
        int moved_i = i + move_ij[k][0];
        int moved_j = j + move_ij[k][1];
        
        if(moved_i >= 0 && moved_j >= 0 && moved_i < 5 && moved_j < 5){
            move(repeat_num + 1, moved_i, moved_j, num*10 + arr[moved_i][moved_j]);
        }
    }
}

int main() {
    
    //๋ฐฐ์—ด ์ž…๋ ฅ๋ฐ›๊ธฐ
    for(int i=0; i<5; i++){
        for(int j=0; j<5; j++){
            cin >> arr[i][j];
        }
    }
    
    //์‹œ์ž‘์ ์€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜
    for(int i=0; i<5; i++){
        for(int j=0; j<5; j++){
            move(0, i, j, arr[i][j]);
        }
    }
    
    //๋ฒกํ„ฐ์•ˆ์— ์ค‘๋ณต๋˜๋Š” ์ˆ˜ ์ •๋ฆฌ
    sort(v.begin(), v.end());
    v.erase(unique(v.begin(),v.end()), v.end());
    
    //์ถœ๋ ฅ
    cout << v.size();
    
    return 0;
}
๋ฐ˜์‘ํ˜•