๊ด€๋ฆฌ ๋ฉ”๋‰ด

Lemonlover๐Ÿง˜๐Ÿป‍โ™€๏ธ

BOJ - ์ฃผ์‚ฌ์œ„ ์œท๋†€์ด (17825) [2019 ์‚ผ์„ฑ SW ๊ธฐ์ถœ] ๋ณธ๋ฌธ

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋Œ€๋น„ ์ถ”์ฒœ ๋ฌธ์ œ

BOJ - ์ฃผ์‚ฌ์œ„ ์œท๋†€์ด (17825) [2019 ์‚ผ์„ฑ SW ๊ธฐ์ถœ]

Summer_lulu 2019. 12. 7. 01:08
728x90
๋ฐ˜์‘ํ˜•

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

 

17825๋ฒˆ: ์ฃผ์‚ฌ์œ„ ์œท๋†€์ด

์ฒซ์งธ ์ค„์— ์ฃผ์‚ฌ์œ„์—์„œ ๋‚˜์˜ฌ ์ˆ˜ 10๊ฐœ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

 

2019๋…„ ํ•˜๋ฐ˜๊ธฐ ์‚ผ์„ฑ ๊ธฐ์ถœ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ์—์„œ ๊ฐ€์žฅ ์–ด๋ ค์šด ์ ์€ ๋ฐ”๋กœ '๋””์ž์ธ'์ž…๋‹ˆ๋‹ค.

๋„๋Œ€์ฒด ์ด ์œท๋†€์ด ํŒ์„ ์–ด๋–ป๊ฒŒ ๋””์ž์ธํ•ด์•ผ ํ•˜๋Š”๊ฐ€...?

 

์ฒ˜์Œ ํ•ด๋ณธ๋‹ค๋ฉด ๊ต‰์žฅํžˆ ๋‚œํ•ดํ•ฉ๋‹ˆ๋‹ค.

 

1. ์ •์‚ฌ๊ฐ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋˜‘๊ฐ™์ด ๊ทธ๋ฆฐ๋‹ค.

2. ์›์„ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ๊ทธ๋ž˜ํ”„๋กœ ์ƒ๊ฐํ•˜์—ฌ ๋””์ž์ธํ•œ๋‹ค.

 

์•„๋ฌด๋ž˜๋„ directed graph๋กœ ์ƒ๊ฐํ•˜๊ณ  ๋””์ž์ธํ•˜๋Š”๊ฒŒ ํ›จ์”ฌ ์‰ฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ, ํŒŒ๋ž€์ƒ‰ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•  ๋•Œ, ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ฒŒ๋” ํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋…ธ๋“œ ๊ฐฏ์ˆ˜๊ฐ€ ์ด 33๊ฐœ ์ •๋„(?) ๋˜๋Š” ๊ฒƒ ๊ฐ™๋„ค์š”.

๋ญ ์ด์ •๋„๋ฉด ... ์‚ฌ์‹ค ๋งค์šฐ ๋งŽ์€ ํŽธ์ด๊ธดํ•œ๋ฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ •๋„๋Š” ์•„๋‹ˆ๊ธฐ์— 

ํ•˜๋‚˜ํ•˜๋‚˜ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด ์ค๋‹ˆ๋‹ค.

 

๋””์ž์ธ์ด ๋๋‚ฌ๋‹ค๋ฉด, ๊ทธ ๋‹ค์Œ์€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค๊ณผ ๋‹ค๋ฅธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ '์™„์ „ ํƒ์ƒ‰'์ž…๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋Œ€์ถฉ ์žก์œผ๋ฉด 4^10 ์ž…๋‹ˆ๋‹ค. ์•ฝ 1000000 ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์•ˆ์— ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•˜์ฃ !

 

์ œ๊ฐ€ ์ž„์˜๋กœ ๋””์ž์ธํ•œ ๋‚ด์šฉ๋“ค์„ ์•„๋ž˜ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๋ดค์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ž„์˜๋กœ ๋ฐฐ์ •ํ•ด์ฃผ๊ณ , adjacent list ๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„์˜ ์—ฃ์ง€๋“ค์„ ํ‘œํ˜„ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋ฉ”์ธ ํ•จ์ˆ˜ ์ฒ˜์Œ์— ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ ค์ฃผ๋Š” ๋ถ€๋ถ„์„ ์œ ์‹ฌํžˆ ๋ณด๊ณ , ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๋น„๊ตํ•ด๋ณด์‹œ๋ฉด ๋‹ค์Œ์— ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ

์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฐ์„ ์žก์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

 

 

 

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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <vector>
#include <string.h>
#include <string>
#include <algorithm>
 
using  namespace std;
 
int v[33][2];
int score[33];
vector<int> yut;    // ์œท๋†€์ด 10๊ฐœ ๊ฒฐ๊ณผ ๋ฐ›๋Š” ๋ณ€์ˆ˜
int ans;
int pos[5];            // 4๊ฐœ์˜ ๋ง์˜ ํ˜„์žฌ์œ„์น˜
bool chk[33];        // ํ˜„์žฌ ๋…ธ๋“œ์— ๋ง์ด ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
bool change_dir[33];    // ์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด
 
 
void sol(int cur, int total){
    if(cur == 10){
        ans = max(ans, total);
        return;
    }
 
    int tries = yut[cur];
 
    for(int i = 0; i < 4; i++){
        int tmp = tries;
        int position = pos[i];
        int temp_pos = position;
 
        if(change_dir[position]){
            tmp -= 1;
            position = v[position][1];
        }
 
        while(tmp--) position = v[position][0];
 
        if(position != 21 && chk[position]) continue;    // 21๋ฒˆ ๋…ธ๋“œ๊ฐ€ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋กœ ์„ธํŒ…๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ฌด์‹œํ•ด์ค€๋‹ค
        // ์ด๊ณณ์œผ๋กœ ์™”๋‹ค๋Š” ๊ฒƒ์€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค
        // ๋”ฐ๋ผ์„œ chk, pos ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ณ€ํ™”์‹œ์ผœ, ๋ง์˜ ์œ„์น˜๊ฐ€ ๋ณ€ํ–ˆ๋‹ค๋Š” ํ‘œํ˜„์„ ํ•ด์ค€๋‹ค
        pos[i] = position;
        chk[temp_pos] = false;
        chk[position] = true;
 
        // ๋ง์˜ ์œ„์น˜๋ฅผ ์ด๋™์‹œํ‚จ ํ›„ ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค
        sol(cur + 1, total + score[position]);
 
        // ๋‹ค์‹œ ๋ง์˜ ์œ„์น˜๋ฅผ ์›๋ž˜ ์žˆ์—ˆ๋˜ ๊ณณ์œผ๋กœ ๋˜๋Œ๋ ค 
        chk[position] = false;
        chk[temp_pos] = true;
        pos[i] = temp_pos;
    }
}
 
 
 
 
 
int main(){
    // ๊ฐ ๋…ธ๋“œ์˜ ๊ทธ ๋‹ค์Œ๋…ธ๋“œ ์„ธํŒ…, ์ฆ‰ ์ด๊ฒƒ์ด ํ™”์‚ดํ‘œ ์„ธํŒ…์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
    for(int i = 0; i <= 24; i++){
        v[i][0= i + 1;
    }
 
    v[21][0= 21;
 
    v[25][0= 31;
    v[26][0= 25;
    v[27][0= 26;
    v[28][0= 27;
    v[29][0= 30;
    v[30][0= 25;
    v[31][0= 32;
    v[32][0= 20;
    
    v[5][1= 22;
    v[10][1= 29;
    v[15][1= 28;
 
    change_dir[5= change_dir[10= change_dir[15= true;            // ์ด ๊ณณ์—์„œ ์‹œ์ž‘ํ•˜๋ฉด, ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ”์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ค์ •ํ•ด์ค€๋‹ค.
 
    // ์ ์ˆ˜์„ธํŒ…
    for(int i = 1; i <= 20; i++) score[i] = 2 * i;
    for(int i = 22; i <= 24; i++) score[i] = 13 + 3 * (i - 22);
    score[25= 25;
    for(int i = 26; i <= 28; i++) score[i] = i;
    score[31= 30;
    score[32= 35;
    score[29= 22;
    score[30= 24;
 
    yut.resize(10);
    for(int i = 0; i < 10; i++)
        cin >> yut[i];
    
    
 
    sol(00);
 
    cout << ans <<  endl;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 
728x90
๋ฐ˜์‘ํ˜•