1059번 : 좋은 구간
문제)
정수 집합 S가 주어졌을때, 다음 조건을 만족하는 구간 [A, B]를 좋은 구간이라고 한다.
- A와 B는 양의 정수이고, A < B를 만족한다.
- A ≤ x ≤ B를 만족하는 모든 정수 x가 집합 S에 속하지 않는다.
집합 S와 n이 주어졌을 때, n을 포함하는 좋은 구간의 개수를 구해보자.
입력 :
첫째 줄에 집합 S의 크기 L이 주어진다. 둘째 줄에는 집합에 포함된 정수가 주어진다. 셋째 줄에는 n이 주어진다.
출력 :
첫째 줄에 n을 포함하는 좋은 구간의 개수를 출력한다.
풀이)
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
|
// 1059. 좋은 구간
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int l;
cin >> l;
vector<int> vec;
vec.resize(l);
for (int& ele : vec) cin >> ele;
// 오름차순 정렬
sort(vec.begin(), vec.end());
int n;
cin >> n;
// 집합 S에서 n보다 큰 수 중 가장 가까운 수를 찾는다.
int s = 0, e = 0;
for (int i = 0; i < l; i++)
{
if (n < vec[i])
{
if( i > 0) s = vec[i - 1];
e = vec[i];
break;
}
}
// 만약 n보다 작은 수 중 가장 가까운 수가 n과 같다면
// 좋은 구간은 만들 수 없다.
if (s == n)
{
cout << 0;
return 0;
}
// n을 포함하는 좋은 구간의 수를 센다.
int cnt = 0;
for (int i = min(s + 1, n); i <= n; i++)
{
for (int j = max(i + 1, n); j <= e - 1; j++)
{
cnt++;
}
}
cout << cnt;
return 0;
}
|
cs |
출처 : https://www.acmicpc.net/problem/1059
1059번: 좋은 구간
[9, 10], [9, 11], [9, 12], [10, 11], [10, 12]
www.acmicpc.net
'Develop > 백준 (Cpp)' 카테고리의 다른 글
[백준] 16918번 : 봄버맨 (C++) (0) | 2023.09.11 |
---|---|
[백준] 11660번 : 구간 합 구하기 5 (C++) (0) | 2023.09.11 |
[백준] 14400번 : 편의점 2 (C++) (0) | 2023.09.10 |
[백준] 11051번 : 이항 계수 2 (C++) (0) | 2023.09.10 |
[백준] 1904번 : 01타일 (C++) (0) | 2023.09.10 |