์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ๋ต ๋น์จ |
2 ์ด | 512 MB | 52.919 % |
๋ฌธ์
ํด๊ฒฐ
- ๊ฐ๋ก, ์ธ๋ก๋ก ๋๋ ์ ํ์๋ค.
- ์ง๋๊ฐ๋ ค๋ ๊ธธ์์ flg๊ฐ ๋ง์ง๋ง์์น๊น์ง false๋ฉด ์ง๋๊ฐ ์ ์๋ค. → ans๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
- pre๋ ์ด์ ๊น์ง ๋ณด๊ณ ์๋ ์นธ์ ๋์ด, cnt๋ pre์ ๊ฐ์์ด๋ค.
- diff๋ pre์ ๋ค์์นธ์ ์ฐจ์ด๋ฅผ ์ ์ฅํ์๊ณ 1์ด๊ฑฐ๋ -1์ด์ด์ผ๋ง ํ๋ค.
- 1์ด๋ผ๋ฉด ๋ค์์ผ๋ก ๋์ด๊ฐ ์นธ์ ๋์ด๊ฐ ๋ ํฐ๊ฒ์ด๋ฏ๋ก ํ์ฌ ๋ณด๊ณ ์๋ ์นธ์ ๊ฐ์๊ฐ l ์ด์์ธ์ง ํ์ธํด์ผํ๊ณ
- -1์ด๋ผ๋ฉด ์์ผ๋ก ๋ณผ ์์น์ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ for๋ฌธ์ผ๋ก l๊ฐ ์ด์ ๊ฐ์ ์นธ์ด ์๋์ง ํ์ธํด์คฌ๋ค.
- ์ด ๋ ์ด๋ฏธ ๊ฒฝ์ฌ๋ก๋ฅผ ๋จ๋ ๊ณณ์ ๋ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ ์ ์์ผ๋ฏ๋ก
- ๋งค ์๊ฐ์ num์ด๋ผ๋ ๋ณ์์ ์ ์ฅํด ๋๊ณ ๊ฒฝ์ฌ๋ก๋ฅผ ๋ ๋ chk[i][j]์ num์ผ๋ก ๊ฐฑ์ ์์ผ ๊ฐ์ num์ผ ๋ ๋ ๊ฒฝ์ฌ๋ก๋ฅผ ๋์ง ์๊ฒ ํ๋จํ์๋ค.
- ์ด ๋ฐฉ๋ฒ์ ๊ฐ๋ก์ ์ธ๋ก ๋ชจ๋ ๋ฐ๋ณตํ ํ ans์ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ด๋ค.
์ฝ๋
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
2068 KB | 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
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
#include <iostream>
using namespace std;
int n, l, arr[105][105], chk[105][105], num = 1, ans;
int main() {
scanf("%d%d", &n, &l);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &arr[i][j]);
}
}
// ๊ฐ๋ก
for (int i = 0; i < n; i++, num++) {
int pre = arr[i][0], cnt = 1;
bool flg = false;
for (int j = 1; j < n; j++) {
if (pre == arr[i][j]) {
cnt++;
}
else {
int diff = arr[i][j] - pre;
if (diff == -1) {
int cntt = 0;
for (int k = j; k < j + l; k++) {
if (arr[i][k] != arr[i][j]) {
flg = true;
break;
}
else cntt++;
}
if (cntt >= l) {
for (int k = j; k < j + l; k++) {
chk[i][k] = num;
}
pre = arr[i][j];
cnt = cntt; j = j + l - 1;
continue;
}
else break;
}
else if (diff == 1) {
if (j > l) {
for (int k = j - 1; k >= j - l; k--) {
if (chk[i][k] == num) {
flg = true; break;
}
}
}
if (cnt < l || flg) {
flg = true; break;
}
}
else {
flg = true; break;
}
pre = arr[i][j];
cnt = 1;
}
}
if (!flg) ans++;
}
// ์ธ๋ก
for (int j = 0; j < n; j++, num++) {
int pre = arr[0][j], cnt = 1;
bool flg = false;
for (int i = 1; i < n; i++) {
if (pre == arr[i][j]) {
cnt++;
}
else {
int diff = arr[i][j] - pre;
if (diff == -1) {
int cntt = 0;
for (int k = i; k < i + l; k++) {
if (arr[k][j] != arr[i][j]) {
flg = true;
break;
}
else cntt++;
}
if (cntt >= l) {
for (int k = i; k < i + l; k++) {
chk[k][j] = num;
}
pre = arr[i][j];
cnt = cntt; i = i + l - 1;
continue;
}
else break;
}
else if (diff == 1) {
if (i > l) {
for (int k = i - 1; k >= i - l; k--) {
if (chk[k][j] == num) {
flg = true; break;
}
}
}
if (cnt < l || flg) {
flg = true;
break;
}
}
else {
flg = true; break;
}
pre = arr[i][j];
cnt = 1;
}
}
if (!flg) ans++;
}
printf("%d", ans);
return 0;
}
|
cs |
the ๋ฉ์ง ์ฝ๋
๋ฐฐ์ด์ ๊ฐ๋ก์ค, ์ธ๋ก์ค์ ๊ฐ๊ฐ ๋ณด๋ฉด์ ์ง๋๊ฐ ์ ์๋์ง ์์๋ณด๋ ๋ฌธ์ ์ด๋ค. ํ ๊ธฐ์ค์ผ๋ก ํด๋น ํ์ ์๋ ๋ชจ๋ ์ด์ ๋ณด๋ ๊ฒ์ ๊ฐ๋ก, ์ด ๊ธฐ์ค์ผ๋ก ํด๋น ์ด์ ์๋ ๋ชจ๋ ํ์ ์ดํด๋ณด๋ ๊ฒ์ด ์ธ๋ก๋ผ๊ณ ํ๋ฉด ์ด ๋ฐฉ๋ฒ์
๋ฐฐ์ด์ [2*n][n] ํฌ๊ธฐ๋ก ์ ์ธํ๊ณ
- 0 ~ n -1ํ๊น์ง๋ ์๋ ๋ฐฐ์ด์,
- n ํ๋ถํฐ๋ ์๋ ๋ฐฐ์ด์ ์ธ๋ก์ค์ ๊ฐ๋ก๋ก ๋ฐ๊พผ ๋ชจ์์ผ๋ก ์ ์ฅํ๋ค.
์ด๋ ๊ฒ ์ ์ฅํด๋๋ฉด ํญ์ ๊ฐ๋ก๋ก๋ง ํ์ํ๋ฉด ๋์ด ํธํ๋ค.
์ง๋๊ฐ ์ ์๋์ง ์๋์ง ํ๋จํ๊ธฐ ์ํด์๋
- c๊ฐ 0 ์ด์์ด๋ฉด ๊ฐ๋ฅ
- c๊ฐ 0 ๋ฏธ๋ง์ด๋ฉด ๋ถ๊ฐ๋ฅ
์ด๋ ๊ฒ ํ๋ณ ๊ฐ๋ฅํ ์ด์ ๋ ์ผ์ชฝ๋ถํฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฐจ๋ก๋๋ก ๋ณธ๋ค๊ณ ํ๋ฉด,
- ์ค๋ฅธ์ชฝ์ด ๋ ํฐ ๊ฒฝ์ฐ
- ํ์ฌ๊น์ง ํ์ํ๋ ์ผ์ชฝ์ ๊ฒฝ์ฌ๋ก๋ฅผ l ํฌ๊ธฐ๋งํผ ๋์ด์ผ ํจ.
- ๋ฐ๋ผ์ c๊ฐ l์ด์์ธ์ง๋ง ํ๋ณํ๋ฉด ๋จ.
- ๊ทธ๋ฆฌ๊ณ c๋ฅผ 1๋ก ๊ฐฑ์
- ์ผ์ชฝ์ด ๋ ํฐ ๊ฒฝ์ฐ์์ผ๋ก ํ์ํ ์ค๋ฅธ์ชฝ์ ๊ฒฝ์ฌ๋ก๋ฅผ l ํฌ๊ธฐ๋งํผ ๋์ด์ผ ํจ.
- ๋ฐ๋ผ์ c๋ฅผ -l + 1๋ก ๊ฐฑ์ ํ๋ค.
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋ ์ ์์๋ค๋ฉด l ๋งํผ c๊ฐ ๋์ด๋ ๊ฒ์ด๋ฏ๋ก c๋ 0 ์ด์์ด๊ณ
- ๊ฒฝ์ฌ๋ก๋ฅผ ๋ ์ ์์๋ค๋ฉด c๋ ์์์ผ ๊ฒ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ | ์๊ฐ |
1112 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
|
#include <cstdio>
int main() {
int n, l, ans = 0, i, j, c;
short a[200][100];
scanf("%d %d", &n, &l);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf("%hd", &a[i][j]);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
a[i + n][j] = a[j][i];
for (i=0; i<n * 2; i++) {
c = 1;
for (j=0; j<n - 1; j++) {
if (a[i][j] == a[i][j + 1]) c++;
else if (a[i][j] + 1 == a[i][j + 1] && c >= l) c = 1;
else if (a[i][j] - 1 == a[i][j + 1] && c >= 0) c = -l + 1;
else break;
}
if (j == n - 1 && c >= 0) ans++;
}
printf("%d", ans);
return 0;
}
|
cs |
'๐ฅ PS(Problem Solving) ๐ฅ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #1406 ์๋ํฐ (0) | 2020.06.02 |
---|---|
[BOJ] #2164 ์นด๋2 (0) | 2020.06.02 |
[BOJ] #5397 ํค๋ก๊ฑฐ (0) | 2020.05.21 |
[BOJ] #1912 ์ฐ์ํฉ (0) | 2020.05.11 |
[BOJ] #2512 ์์ฐ (0) | 2020.05.11 |
๋๊ธ