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

[BOJ] #14830 ๊ฒฝ์‚ฌ๋กœ

by dar0m! 2020. 5. 21.
์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ •๋‹ต ๋น„์œจ
 2 ์ดˆ 512 MB 52.919 %

 

 

14890๋ฒˆ: ๊ฒฝ์‚ฌ๋กœ

์ฒซ์งธ ์ค„์— N (2 ≤ N ≤ 100)๊ณผ L (1 ≤ L ≤ N)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ง€๋„๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์นธ์˜ ๋†’์ด๋Š” 10๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

๋ฌธ์ œ

ํ•ด๊ฒฐ

  • ๊ฐ€๋กœ, ์„ธ๋กœ๋กœ ๋‚˜๋ˆ ์„œ ํ’€์—ˆ๋‹ค.
  • ์ง€๋‚˜๊ฐ€๋ ค๋Š” ๊ธธ์—์„œ 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 = truebreak;
                            }
                        }
                    }
                    if (cnt < l || flg) {
                        flg = true;    break;
                    }                    
                }
                else {
                    flg = truebreak;
                }
 
                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 = truebreak;
                            }
                        }
                    }
                    if (cnt < l || flg) {
                        flg = true;
                        break;
                    }
                }
                else {
                    flg = truebreak;
                }
 
                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<* 2; i++) {
        c = 1;
        for (j=0; j<- 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 = -+ 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

๋Œ“๊ธ€