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

[BOJ] #3190 ๋ฑ€

by dar0m! 2019. 9. 29.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 128 MB 31.052%

 

 

3190๋ฒˆ: ๋ฑ€

๋ฌธ์ œ  'Dummy' ๋ผ๋Š” ๋„์Šค๊ฒŒ์ž„์ด ์žˆ๋‹ค. ์ด ๊ฒŒ์ž„์—๋Š” ๋ฑ€์ด ๋‚˜์™€์„œ ๊ธฐ์–ด๋‹ค๋‹ˆ๋Š”๋ฐ, ์‚ฌ๊ณผ๋ฅผ ๋จน์œผ๋ฉด ๋ฑ€ ๊ธธ์ด๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๋ฑ€์ด ์ด๋ฆฌ์ €๋ฆฌ ๊ธฐ์–ด๋‹ค๋‹ˆ๋‹ค๊ฐ€ ๋ฒฝ ๋˜๋Š” ์ž๊ธฐ์ž์‹ ์˜ ๋ชธ๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚œ๋‹ค. ๊ฒŒ์ž„์€ NxN ์ •์‚ฌ๊ฐ ๋ณด๋“œ์œ„์—์„œ ์ง„ํ–‰๋˜๊ณ , ๋ช‡๋ช‡ ์นธ์—๋Š” ์‚ฌ๊ณผ๊ฐ€ ๋†“์—ฌ์ ธ ์žˆ๋‹ค. ๋ณด๋“œ์˜ ์ƒํ•˜์ขŒ์šฐ ๋์— ๋ฒฝ์ด ์žˆ๋‹ค. ๊ฒŒ์ž„์ด ์‹œ์ž‘ํ• ๋•Œ ๋ฑ€์€ ๋งจ์œ„ ๋งจ์ขŒ์ธก์— ์œ„์น˜ํ•˜๊ณ  ๋ฑ€์˜ ๊ธธ์ด๋Š” 1 ์ด๋‹ค. ๋ฑ€์€ ์ฒ˜์Œ์— ์˜ค๋ฅธ์ชฝ์„ ํ–ฅํ•œ๋‹ค. ๋ฑ€์€ ๋งค ์ดˆ๋งˆ๋‹ค ์ด๋™์„ ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ

www.acmicpc.net

 

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

testcase 1

20
13
6 15
7 18
20 14
14 13
11 9
7 10
3 18
10 10
13 13
13 5
6 9
10 4
4 3
19
17 D
36 D
41 D
54 D
56 L
57 L
63 L
68 L
72 L
73 L
76 D
79 D
82 D
85 D
87 D
93 L
105 D
110 D
114 D

์ถœ๋ ฅ : 90

testcase 2

5
2
2 5
2 4
6
4 D
5 D
6 D
7 D
8 D
9 D

์ถœ๋ ฅ : 14

 

์‹œํ–‰์ฐฉ์˜ค

testcase 1์— ํ•ด๋‹นํ•˜๋Š” ๊ทธ๋ฆผ

๋ถ„ํ™์ƒ‰ ํ˜•๊ด‘ํŽœ = ์‚ฌ๊ณผ

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์งˆ๋ฌธ๊ฒ€์ƒ‰์—์„œ ์–ป์–ด์„œ ๊ทธ๋ ค๋ณด๋Š”๋ฐ ์–ด์ฉ์ง€ ๊ณ„์† 85๊ฐ€ ๋‚˜์™€์„œ ๋ญ์ง€... ํ•˜๋‹ˆ๊นŒ '56 L' ์ด ๋ˆ„๋ฝ๋์—ˆ๋‹ค ใ„ฑ- ์ œ๋Œ€๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋‹ˆ ์™œ 90์ดˆ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ‹€๋ ธ๋˜ ์ด์œ ์™€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

1. ์ด์ „์— ๋ช‡ ๋ฒˆ ํ‹€๋ ธ์—ˆ๋Š”๋ฐ ๊ทธ ์ด์œ ๋Š” ๋ฑ€์€ ์ž๊ธฐ์ž์‹ ์˜ '๋ชธ'๊ณผ ๋ถ€๋”ชํžˆ๋ฉด ๊ฒŒ์ž„์ด ๋๋‚˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋‚˜๋Š” '๊ผฌ๋ฆฌ' ์œ„์น˜๋งŒ ์ €์žฅํ•˜์—ฌ ๋ชธ๊ณผ ๋ถ€๋”ชํ˜”์„ ๋•Œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‹€๋ ธ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๊ผฌ๋ฆฌ์˜ ์œ„์น˜๋Š” ๊ณ„์† ์œ ์ง€ํ•˜๋˜, ๋ฑ€์ด ์ง€๋‚˜๊ฐ€๋Š” ๋ถ€๋ถ„์„ arr[i][j] ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด arr[i][j]=2 ๋กœ ๋ฐ”๊พธ์–ด ๋ฑ€์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•˜๊ฒŒ ํ•˜์˜€๋‹ค. ๋ฑ€์˜ ๋จธ๋ฆฌ๊ฐ€ ์‚ฌ๊ณผ๋ฅผ ๋จน์ง€ ์•Š์•„ ๊ผฌ๋ฆฌ๋ฅผ ํ•œ ์นธ ๋‹น๊ธฐ๊ฒŒ ๋  ๋•Œ๋Š”, ํ˜„์žฌ ๊ผฌ๋ฆฌ ์œ„์น˜์— ํ•ด๋‹นํ•˜๋Š” arr[tail.first][tail.second]=0 ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๊ผฌ๋ฆฌ์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ tail์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

2. ๋ณ€์ˆ˜์˜ ์˜๋ฏธ๋ฅผ ํ—ท๊ฐˆ๋ ธ๋‹ค.

๋‚ด๊ฐ€ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ๋„ ๋กœ์ง์„ ์ œ๋Œ€๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋จผ์ € ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ, ์ฝ”๋“œ์ˆ˜์ • ์‹œ ์‹ค์ˆ˜๋ฅผ ํ•˜๊ฒŒ ๋˜์–ด ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํ˜ผ๋ž€์ด ์™€์„œ ํ‹€๋ฆฌ์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ถ€๋ถ„์„ ํ‹€๋ ธ๋‹ค. ์•ž์œผ๋กœ๋Š” ์ œ๋Œ€๋กœ ๋…ธํŠธ์— ํ•„๊ธฐ๋„ ํ•˜๊ณ  ์ƒ์„ ์ถฉ๋ถ„ํžˆํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ์•ผ๊ฒ ๋‹ค.

 

๋ฉ”๋ชจ๋ฆฌ ์‹œ๊ฐ„
1160 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
#include <cstdio>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
int arr[105][105];
int n, K, L, i, idx, tail_idx, dir, tail_dir; //idx ๋Š” turn ์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ, dir ์€ ๋จธ๋ฆฌ ๋ฐฉํ–ฅ, tail_dir์€ ๊ผฌ๋ฆฌ ๋ฐฉํ–ฅ
int dx[] = { 010-1 };
int dy[] = { 10-10 };
pair<intchar> turn[105];
pair<intint> tail;
// ์‚ฌ๊ณผ๋Š” 1, ๋ฑ€์€ 2, ์•„๋ฌด๊ฒƒ๋„ ์—†์œผ๋ฉด 0
int main(){    
    scanf("%d %d"&n, &K);
    for (int i = 0, a, b; i < K; i++) {
        scanf("%d %d"&a, &b);
        arr[a][b] = 1// ์‚ฌ๊ณผ
    }
    scanf("%d"&L);
    int X; char C;
    for (int i = 0; i < L; i++) {
        scanf("%d %c"&X, &C);
        turn[i] = { X, C };
    }
    int r = 1, c = 1, sec = 0, cnt = 0;
    arr[1][1= 2;
    tail = { 1,1 };
    while (r >= 1 && r <= n && c >= 1 && c <= n) {
        int tf = turn[idx].first;    char ts = turn[idx].second;
        
        r = r + dx[dir]; c = c + dy[dir];
        sec++;
        if (arr[r][c] == 2) {
            break;
        }
        if (!arr[r][c]) { // ๊ผฌ๋ฆฌ๊ฐ€ ์œ„์น˜ํ•œ ์นธ์„ ๋‹น๊ฒจ์ค€๋‹ค.
            cnt++;
            arr[tail.first][tail.second] = 0;
            tail.first = tail.first + dx[tail_dir]; tail.second = tail.second + dy[tail_dir];
        }
        if (sec == tf) { // ๋จธ๋ฆฌ ๋ฐฉํ–ฅ์ „ํ™˜
            dir = ts == 'L' ? (dir + 3) % 4 : (dir + 1) % 4;
            idx++;
        }
        if (cnt == turn[tail_idx].first) { // ๊ผฌ๋ฆฌ ๋ฐฉํ–ฅ์ „ํ™˜
            tail_dir = turn[tail_idx].second == 'L' ? (tail_dir + 3) % 4 : (tail_dir + 1) % 4;
            tail_idx++;
        }        
        arr[r][c] = 2;
    }
    printf("%d", sec);
    return 0;
}
cs

 

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

[BOJ] #14891 ํ†ฑ๋‹ˆ๋ฐ”ํ€ด  (0) 2019.10.02
[BOJ] #14889 ์Šคํƒ€ํŠธ์™€ ๋งํฌ  (0) 2019.10.02
[BOJ] #16929 Two Dots  (0) 2019.09.29
[BOJ] #6359 ๋งŒ์ทจํ•œ ์ƒ๋ฒ”  (0) 2019.09.19
[BOJ] #14501 ํ‡ด์‚ฌ  (0) 2019.09.19

๋Œ“๊ธ€