[BOJ] #3190 λ±
μκ° μ ν | λ©λͺ¨λ¦¬ μ ν | μ λ΅ λΉμ¨ |
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
μνμ°©μ€
λΆνμ νκ΄ν = μ¬κ³Ό
ν μ€νΈμΌμ΄μ€λ₯Ό μ§λ¬Έκ²μμμ μ»μ΄μ κ·Έλ €λ³΄λλ° μ΄μ©μ§ κ³μ 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[] = { 0, 1, 0, -1 };
int dy[] = { 1, 0, -1, 0 };
pair<int, char> turn[105];
pair<int, int> 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 |