๐Ÿ’ป

[๋ฐฑ์ค€] ๋ฐฑํŠธ๋ž˜ํ‚น - 3967. ๋งค์ง ์Šคํƒ€ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] ๋ฐฑํŠธ๋ž˜ํ‚น - 3967. ๋งค์ง ์Šคํƒ€

๋˜ํšจ๋‹ˆ 2020. 3. 18. 20:19

๋ฌธ์ œ

๋งค์ง ์Šคํƒ€๋Š” 1๋ถ€ํ„ฐ 12๊นŒ์ง€ ์ˆซ์ž๊ฐ€ ํ—ฅ์‚ฌ๊ทธ๋žจ(hexagram)์— ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๋ชจ์–‘์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

๋งค์ง ์Šคํƒ€์˜ ์ด๋ฆ„์— ๋งค์ง์ด ๋“ค์–ด๊ฐ€๋Š” ์ด์œ ๋Š” ์ˆซ์ž ๋„ค ๊ฐœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ค„์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ํ•ฉํ•˜๋ฉด 26์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์˜ ์—ฌ์„ฏ ์ค„์— ์“ฐ์—ฌ ์žˆ๋Š” ์ˆซ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • 1 + 4 + 10 + 11
  • 11 + 5 + 3 + 7
  • 7 + 6 + 12 + 1
  • 2 + 10 + 5 + 9
  • 9 + 3 + 6 + 8
  • 8 + 12 + 4 + 2

๋งค์ง ์Šคํƒ€๋ฅผ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ์ผ๋ถ€๋งŒ ์ฑ„์›Œ์ง„ ๋งค์ง ์Šคํƒ€๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆ˜๋ฅผ ์ „๋ถ€ ๋‹ค ์ฑ„์›Œ์„œ ๋งค์ง ์Šคํƒ€๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

๋งค์ง ์Šคํƒ€์˜ ๋ชจ์–‘์ด ์ฃผ์–ด์ง„๋‹ค. ์ˆ˜๊ฐ€ ์ฑ„์›Œ์ ธ ์žˆ์ง€ ์•Š์€ ๊ณณ์€ x๋กœ, ์ฑ„์›Œ์ ธ ์žˆ๋Š” ๊ณณ์€ 'A'๋ถ€ํ„ฐ 'L'๊นŒ์ง€ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์ฑ„์›Œ์ ธ ์žˆ๋‹ค. i๋ฒˆ์งธ ์•ŒํŒŒ๋ฒณ์€ ์ˆซ์ž i๋ฅผ ์˜๋ฏธํ•œ๋‹ค. '.'๋Š” ๋งค์ง ์Šคํƒ€์˜ ํ˜•ํƒœ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ž์ด๋‹ค. ๋ชจ๋“  ์ž…๋ ฅ์€ ์˜ˆ์ œ ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

๋งค์ง ์Šคํƒ€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘์— ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๋Š” ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•œ๋‹ค. (๋ชจ๋“  ์ค„์„ ์ˆœ์„œ๋Œ€๋กœ ๋ถ™์—ฌ์„œ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“  ๋’ค, ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๋น„๊ตํ•œ๋‹ค.) ํ•ญ์ƒ ์ •๋‹ต์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

์˜ˆ์ œ ์ถœ๋ ฅ1

 

์ƒ๊ฐ

        (0, 4)        
  (1, 1)   (1, 3)    (1, 5)   (1 ,7)  
    (2, 2)   (2, 4)   (2,6)    
  (3, 1)   (3, 3)   (3,5)   (3, 7)  
        (4, 4)        

๋ณ„๋ชจ์–‘์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์•ผํ•˜๋‚˜ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ, ์ธ๋ฑ์Šค ๊ทœ์น™์„ ์ฐพ์œผ๋ ค๊ณ  ํ•˜๋‹ค๊ฐ€ ๊ผฌ์—ฌ๋ฒ„๋ ค์„œ

๊ทธ๋ƒฅ ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ–ˆ๋‹ค. 

[์ฐธ๊ณ ]https://yabmoons.tistory.com/148

 

' ๋งค์ง ์Šคํƒ€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘์— ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๋Š” ๋ฐฉ๋ฒ•์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ถœ๋ ฅ ์กฐ๊ฑด๋•Œ๋ฌธ์— ๊ณ ๋ฏผ์„ ํ–ˆ๋Š”๋ฐ ์–ด์ฐจํ”ผ DFSํ˜ธ์ถœ ์ˆœ์„œ๋กœ ์ธํ•ด ๋งจ ์ฒซ๋ฒˆ์งธ ์ถœ๋ ฅํ•˜๋Š” ๋ณ„ ๋ชจ์–‘์ด ์‚ฌ์ „ ์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๊ฒŒ ๋œ๋‹ค. 

exit(0) ๋Œ€์‹  return์„ ์“ฐ๊ฒŒ๋˜๋ฉด ์ถœ๋ ฅ๊ฐ’์ด 2๊ฐœ ๋‚˜์˜จ๋‹ค. 

F๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ๊ณผ, G๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ

๋”ฐ๋ผ์„œ exit(0)์„ ์จ์„œ ๊ฐ•์ œ ์ข…๋ฃŒ ์‹œ์ผœ์ค˜์•ผํ•œ๋‹ค. 

 

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <stdio.h>
#include <vector>
 
using namespace std;
 
char star[5][9];
bool visited[13];
int cnt = 0;
 
vector< pair<intint> > v;
 
bool check(){
    if ((star[0][4- 'A' + 1+ (star[1][3- 'A' + 1+ (star[2][2- 'A' + 1+ (star[3][1- 'A' + 1!= 26return false;
    if ((star[0][4- 'A' + 1+ (star[1][5- 'A' + 1+ (star[2][6- 'A' + 1+ (star[3][7- 'A' + 1!= 26return false;
    if ((star[1][1- 'A' + 1+ (star[1][3- 'A' + 1+ (star[1][5- 'A' + 1+ (star[1][7- 'A' + 1!= 26return false;
    if ((star[3][1- 'A' + 1+ (star[3][3- 'A' + 1+ (star[3][5- 'A' + 1+ (star[3][7- 'A' + 1!= 26return false;
    if ((star[4][4- 'A' + 1+ (star[3][3- 'A' + 1+ (star[2][2- 'A' + 1+ (star[1][1- 'A' + 1!= 26return false;
    if ((star[4][4- 'A' + 1+ (star[3][5- 'A' + 1+ (star[2][6- 'A' + 1+ (star[1][7- 'A' + 1!= 26return false;
 
    return true;
}
void DFS(int idx, int n){
    if(n == cnt){
        if(check() == true){ // x์˜ ๊ฐœ์ˆ˜์™€ ๋ฐฉ๋ฌธํ•œ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ์ข…๋ฃŒ
            for(int i=0; i<5; i++){
                for(int j=0; j<9; j++){
                    cout << star[i][j];
                }
                cout << "\n";
            }
            exit(0);
        }
    }
    for(int i=0; i<12; i++){
        if(visited[i] == truecontinue;
        visited[i] = true;
        star[v[idx].first][v[idx].second] = i + 'A';
        DFS(idx+1, n+1);
        star[v[idx].first][v[idx].second] = 'x';
        visited[i] = false;
    }
}
 
int main(int argc, const char * argv[]) {
    // insert code here...
 
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    
    for(int i=0; i<5; i++){
        for(int j=0; j<9; j++){
            cin >> star[i][j];
            
            if('A' <= star[i][j] && star[i][j] <= 'L'){ // ์•ŒํŒŒ๋ฒณ์ด๋ฉด true
                visited[star[i][j] - 'A'= true;
            }else if(star[i][j] == 'x'){
                v.push_back(make_pair(i, j));
                cnt ++// x์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ์•ŒํŒŒ๋ฒณ ์ฑ„์šธ ๊ฐฏ์ˆ˜ ์ฒดํฌ
            }
        }
    }
    
    DFS(0,0);
    
    return 0;
}
 
 
Colored by Color Scripter
๋ฐ˜์‘ํ˜•
Comments