티스토리 뷰

728x90

문제 링크

https://www.acmicpc.net/problem/15360

 

15360번: Rasvjeta

It is Advent season. There are M street lights in a street N metres long (the meters of the street are denoted with numbers from 1 to N). Each of the lights lights up the meter of the street it’s located in and K meters to the left and to the right of that

www.acmicpc.net

 

하나의 가로등은 그 지점과 양쪽으로 K만큼 떨어진 지점까지 불을 밝힙니다.

앞에서부터 순서대로 보면서 빛이 안 들어오는 지점이 있다면 그 지점에서 뒤로 K 번째 지점에 가로등을 설치하면 됩니다.

 

이유는 다음과 같습니다.

위의 방법으로 처리하던 중에 어떤 지점 X가 어둡다는 뜻은, X를 보고 있는 상황에서 적어도 X 앞의 모든 지점은 불이 밝혀져 있다는 뜻입니다. 그럼 이왕 X를 밝힐 거면 밝을 것이 확실한 지점(X 앞의 지점들)을 제외하고 최대한 불을 비추는 게 이득이므로 X를 밝힐 수 있으면서 가장 멀리 떨어진 지점인 (X + K) 지점에 가로등을 설치하게 됩니다.

 

 

정답 코드

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
#include <iostream>
using namespace std;
 
int n, m, k;
int ans;
int p[2000];
void foo(int x) {
    for (int i = x - k; i < x + k + 1; i++){
        if(i < 1continue;
        if(i > n) break;
        p[i] = 1;
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    cin >> n >> m >> k;
    for (int i = 0; i < m; i++) {
        int x;
        cin >> x;
        foo(x);
    }
    for (int i = 1; i < n + 1; i++) {
        if (p[i] == 0) {
            ans++;
            if (i + k < n + 1) {
                i += k;
                foo(i);
            }
        }
    }
    cout << ans;
}
cs
728x90

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[BOJ] 백준 2902 KMP는 왜 KMP일까?  (0) 2019.05.18
[BOJ] 백준 11365 !밀비 급일  (0) 2019.05.18
[BOJ] 백준 15361 Izbori  (0) 2019.05.13
[BOJ] 백준 16211 백채원  (0) 2019.05.13
[BOJ] 백준 16724 피리 부는 사나이  (1) 2019.01.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/02   »
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
글 보관함