[문제]
파이프의 가장 왼쪽에서 정수만큼 떨어진 거리만 물이 샌다. 각 새는 포인트를 길이가 L인 테이프를 붙여 막는다.
막을때 앞뒤 각 0.5의 간격을 두어야 하고 테이프를 자르거나 겹쳐붙일 수 없다. 사용되는 테이프의 개수는?
[풀이]
간단한 문제인데 생각보다 너무 복잡하게 풀어서 재정리 후 코드를 간소화 시켜보았습니다.
테이프의 시작점을 잡고 start(시작점) + L(테이프길이)로 비교하며 두가지 케이스로 나누었습니다.
1. 현재 구멍난 곳이 start + L 보다 크거나 같을 때
2. 현재 구멍난 곳이 start + L 보다 작을 때
1번의 경우는 마지막 구멍일 경우에 tape 개수를 한번 더 + 해주었고
2번의 경우는 마지막 구멍이 아닐 경우에는 continue, 마지막일 경우에만 + 해주어 마무리 했습니다.
아래는 풀이한 코드입니다.
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 <iostream>
using namespace std;
int main(void) {
int n, l;
cin >> n >> l;
int leak[1000];
int tape_cnt = 0;
for (int i = 0; i < n; i++) cin >> leak[i];
sort(leak, leak + n);
int start = leak[0];
for (int i = 0; i < n; i++) {
if (i - 1 >= 0 && start+l <= leak[i]) {
tape_cnt++;
if (i == n - 1) tape_cnt++;
start = leak[i];
}
else if (start+l > leak[i] && i == n-1) {
tape_cnt++;
}
}
cout << tape_cnt;
return 0;
}
|
cs |
질문이나 지적하실 부분은 댓글로 부탁드립니다:)
'알고리즘 > BOJ' 카테고리의 다른 글
[백준] 1202번 보석도둑 (0) | 2019.07.26 |
---|---|
[백준] 1969번 DNA (0) | 2019.07.18 |
[백준] 2352번 반도체 설계 (0) | 2019.07.13 |
[백준] 1700번 멀티탭 스케줄링 (0) | 2019.07.12 |
[백준] 1946번 신입 사원 (0) | 2019.07.12 |