ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [1059] 좋은 구간
    BOJ 2021. 10. 3. 00:11

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

     

    1059번: 좋은 구간

    [9, 10], [9, 11], [9, 12], [10, 11], [10, 12]

    www.acmicpc.net

    <문제>

    입력을 받고, 정렬한다. 정렬을 한다면

    선형적으로 탐색을 진행하다 포함해야하는 숫자 n을 초과하는 시점에 break를 걸어줌으로써

    구간 시작점의 최소값인 start와 구간 종료지점의 최대값인 end를 찾을 수 있다.

     

    한가지 주의할점은 start = v[i-1], end = v[i]가 아닌,(off by one)

    구간내 수가 입력된 수에 속하지 않아야 하기에

    start = v[i-1] + 1, end = v[i] - 1으로 설정해 주어야 한다. 

     

    좋은 구간이 되기 위해서는, 구간의 길이가 2인것부터 탐색하면 되겠다.

    그렇기에 2중for에서 j의 시작점을 i+1로 설정해주고 정답을 업데이트해나가면 된다.

     

    <소스코드>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <bits/stdc++.h>
    using namespace std;
    int n, t;
    int main(void) {
        int i, j;
        cin >> n;
        vector<int> v(n);
        for (i = 0; i < n; i++cin >> v[i];
        cin >> t;
        sort(v.begin(), v.end());
        for (i = 0; i < n; i++)
            if (v[i] > t) break;
        int start = v[i - 1+ 1end = v[i] - 1;
        int answer = 0;
        for (i = start; i < end; i++) {
            for (j = i + 1; j <= end; j++) {
                if (i <= t && t <= j) answer++;
            }
        }
        cout << answer;
        return 0;
    }
    cs

     

    'BOJ' 카테고리의 다른 글

    [1080] 행렬  (0) 2021.10.03
    [1744] 수 묶기  (0) 2021.10.03
    [20056] 마법사 상어와 파이어볼  (0) 2021.10.02
    [1261] 알고스팟  (0) 2021.10.02
    [9019] DSLR  (0) 2021.10.02

    댓글