๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ/BOJ

[BOJ] #14891 ํ†ฑ๋‹ˆ๋ฐ”ํ€ด

by dar0m! 2019. 10. 2.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
2 ์ดˆ 512 MB 49.598%

 

 

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

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

www.acmicpc.net

 

๋ฐฉ๋ฒ•

ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค์„ gears ๋ผ๋Š” ๋ฐฐ์—ด์— ์ €์žฅํ•ด ๋‘๊ณ  ํšŒ์ „์‹œํ‚ฌ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ gear ๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, gear ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค๊ณผ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋“ค์„ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ๋งˆ์ง€๋ง‰์— gear ๋ฒˆ์งธ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ํšŒ์ „์‹œํ‚ค๋„๋ก ํ•˜์˜€๋‹ค.

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ๋‹ต๊ฒŒ ํšŒ์ „ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€์žฅ ๋จผ์ € ๋– ์˜ฌ๋ž๋˜ '์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ'ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. 4๊ฐœ์˜ ๋ฐ”ํ€ด์˜ 12์‹œ ๋ฐฉํ–ฅ์„ ์ €์žฅํ•ด๋‘๋Š” ๋ฐฐ์—ด idx[] ๋ฅผ ๋‘์–ด, ํšŒ์ „ํ•  ๋•Œ๋งˆ๋‹ค idx[ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ๋ฒˆํ˜ธ]๋ฅผ ๊ฐฑ์‹ ์‹œ์ผฐ๋‹ค.

  • ์‹œ๊ณ„๋ฐฉํ–ฅ์ด๋ผ๋ฉด idx[gear] = (idx[gear]+7) % 8;
  • ๋ฐ˜ ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „์ด๋ผ๋ฉด idx[gear] = (idx[gear]+1) % 8; 

๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์กฐ๊ฑด๋ฌธ ์—†์ด ๋ฐ”๋กœ ๊ฐฑ์‹ ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1116 KB 0 ms
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
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int gears[5][10], idx[5], t, gear, dir, preidx, predir, ans; 
char c[10];
int main(){
    memset(gears, -1sizeof(gears));
    for (int i = 0; i < 4; i++) {
        scanf("%s", c);
        for (int j = 0; j < 8; j++) {
            gears[i][j] = c[j] - '0';
        }
    }
    for (int i = 0; i < 4; i++) idx[i] = 0// 12์‹œ ๋ฐฉํ–ฅ ์ธ๋ฑ์Šค๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™”.
 
    scanf("%d"&t);
    while (t--) {
        scanf("%d %d"&gear, &dir);
        // ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๋Œ์•„๊ฐ.
        if (gear > 1 && gears[gear - 1][(idx[gear - 1+ 6) % 8!= gears[gear - 2][(idx[gear - 2+ 2) % 8]) {
            predir = dir;
            for (int i = gear - 2; i >= 0; i--) {
                preidx = idx[i];
                if (predir == 1) { // ์ด์ „์ด ์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 1) % 8;
                    predir = -1;
                }
                else { // ์ด์ „์ด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 7) % 8;
                    predir = 1;
                }
                // preidx ์™€ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋น„๊ต.
                if (gears[i][(preidx + 6) % 8== gears[i - 1][(idx[i - 1+ 2) % 8]) break;
            }
        }
        if (gear < 4 && gears[gear - 1][(idx[gear - 1+ 2) % 8!= gears[gear][(idx[gear] + 6) % 8]) {
            predir = dir;
            for (int i = gear; i <= 3; i++) {
                preidx = idx[i];
                if (predir == 1) { // ์ด์ „์ด ์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 1) % 8;
                    predir = -1;
                }
                else { // ์ด์ „์ด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 7) % 8;
                    predir = 1;
                }
                // preidx ์™€ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋น„๊ต.
                if (gears[i][(preidx + 2) % 8== gears[i + 1][(idx[i + 1+ 6) % 8]) break// ์–‘์ชฝ ๋ ๋ถ€๋ถ„๋„ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ -1๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ๋‘๊ณ  ๊ฐ™์€์ง€๋กœ ํŒ๋ณ„.
            }
        }
        // gear -1 ๋ฒˆ์งธ ํ†ฑ๋‹ˆ idx ๋ณ€๊ฒฝ.
        if (dir == 1) { // ์‹œ๊ณ„๋ฐฉํ–ฅ
            idx[gear - 1= (idx[gear - 1+ 7) % 8;
        }
        else { // ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ
            idx[gear - 1= (idx[gear - 1+ 1) % 8;
        }
    }
    int sq = 1;
    for (int i = 0; i < 4; i++) { // S๊ทน ์€ 1๋กœ ๋‚˜ํƒ€๋‚˜์žˆ๊ณ  
        ans += gears[i][idx[i]] * sq;    sq *= 2;
    }
    printf("%d", ans);
 
    return 0;
}
cs

 

 

์ž…๋ ฅ์ด ๋„์–ด์“ฐ๊ธฐ ์—†์ด ์ฃผ์–ด์ง€๋Š” ๋ถ€๋ถ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„ int๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ๋Š”๋ฐ, ํ˜•์‹์ง€์ •์ž๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  gears ๋ฐฐ์—ด์„ 1๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ๋ถ€ํ„ฐ ๋„ฃ์–ด ์ข€ ๋” ์ง๊ด€์ ์ด๋„๋ก ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค.

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
#include <cstdio>
#include <string.h>
#include <algorithm>
using namespace std;
int gears[5][10], idx[5], t, gear, dir, preidx, predir, ans; 
int main(){
    memset(gears, -1sizeof(gears));
    for (int i = 1; i <= 4; i++) {
        for (int j = 0; j < 8; j++) {
            scanf("%1d"&gears[i][j]);
        }
    }
    scanf("%d"&t);
    while (t--) {
        scanf("%d %d"&gear, &dir);
        // ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด
        if (gears[gear][(idx[gear] + 6) % 8!= gears[gear - 1][(idx[gear - 1+ 2) % 8]) {
            predir = dir;
            for (int i = gear -1; i > 0; i--) {
                preidx = idx[i];
                if (predir == 1) { // ์ด์ „์ด ์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 1) % 8; predir = -1;
                }
                else { // ์ด์ „์ด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 7) % 8;    predir = 1;
                }
                // preidx ์™€ ์™ผ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋น„๊ต.
                if (gears[i][(preidx + 6) % 8== gears[i - 1][(idx[i - 1+ 2) % 8]) break;
            }
        }
        // ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด
        if (gears[gear][(idx[gear] + 2) % 8!= gears[gear+1][(idx[gear+1+ 6) % 8]) {
            predir = dir;
            for (int i = gear + 1; i <= 4; i++) {
                preidx = idx[i];
                if (predir == 1) { // ์ด์ „์ด ์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 1) % 8;
                    predir = -1;
                }
                else { // ์ด์ „์ด ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ์ด์—ˆ๋‹ค๋ฉด ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ๋Œ์•„์•ผํ•จ.
                    idx[i] = (idx[i] + 7) % 8;
                    predir = 1;
                }
                // preidx ์™€ ์˜ค๋ฅธ์ชฝ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด๋ฅผ ๋น„๊ต.
                if (gears[i][(preidx + 2) % 8== gears[i + 1][(idx[i + 1+ 6) % 8]) break// ์–‘์ชฝ ๋ ๋ถ€๋ถ„๋„ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ -1๋กœ ์ดˆ๊ธฐํ™” ์‹œ์ผœ๋‘๊ณ  ๊ฐ™์€์ง€๋กœ ํŒ๋ณ„.
            }
        }
        // gear ๋ฒˆ์งธ ํ†ฑ๋‹ˆ 12์‹œ ๋ฐฉํ–ฅ idx ๋ณ€๊ฒฝ.
        if (dir == 1) { // ์‹œ๊ณ„๋ฐฉํ–ฅ
            idx[gear] = (idx[gear] + 7) % 8;
        }
        else { // ๋ฐ˜์‹œ๊ณ„๋ฐฉํ–ฅ
            idx[gear] = (idx[gear] + 1) % 8;
        }
    }
    int sq = 1;
    for (int i = 1; i <= 4; i++) { // S๊ทน ์€ 1 
        ans += gears[i][idx[i]] * sq;    sq *= 2;
    }
    printf("%d", ans);
 
    return 0;
}
cs

'๐Ÿ”ฅ PS(Problem Solving) ๐Ÿ”ฅ > BOJ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[BOJ] #1149 RGB ๊ฑฐ๋ฆฌ  (0) 2019.10.02
[BOJ] #1010 ๋‹ค๋ฆฌ๋†“๊ธฐ  (0) 2019.10.02
[BOJ] #14889 ์Šคํƒ€ํŠธ์™€ ๋งํฌ  (0) 2019.10.02
[BOJ] #3190 ๋ฑ€  (0) 2019.09.29
[BOJ] #16929 Two Dots  (0) 2019.09.29

๋Œ“๊ธ€