Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 2623
- stl
- WebRTC란
- ESP32
- 풀이
- 9996
- LOLIN D32
- 메모리계층
- 자료구조
- REACT
- TDD
- 테스트주도개발
- 3XN 타일링
- tfjs
- OpenVidu
- 구현
- RBT
- 적두트리
- c++
- mediastream
- 페이지교체알고리즘
- 1796
- 데이터 링크 계층
- 구슬탈출
- 13459
- 백준
- Vite 사용 이유
- dp
- 백준 2133
- TDD란?
Archives
- Today
- Total
그냥 블로그
[C++/백준] 흙길 보수하기 본문
반응형
https://www.acmicpc.net/problem/1911
[풀이 과정]
1. 일단, 가능한 알고리즘이 없어서 그리디나 완탐.
2. 완탐으로 한번 생각해보면, (while) 위치가 10억까지여서 안된다는 걸 알 수 있었다.
3. 그래서 입력이 좌표 순서대로 정렬 후 마지막 널빤지 위치만 체크해주고 다음 웅덩이에 닿는지만 확인해 줌
4. 추가적인 조건은 코드 짜면서 바로바로 생각해 낼 수 있었음.
#include<iostream>
#include<tuple>
#include<vector>
#include<algorithm>
using namespace std;
int N, L;
vector<pair<int, int>> v;
void input() {
int s, e;
for (int i = 0; i < N; i++) {
cin >> s >> e;
v.push_back({ s,e });
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> L;
int cnt = 0;
// 마기막 널빤지가 끝나는 좌표
// 웅덩이가 0좌표 부터 시작될 수 있기 때문에 -1 할당.
int prev_e = -1;
input();
// 웅덩이 좌표 정렬
sort(v.begin(), v.end());
for (int i = 0; i < N; i++) {
int s, e;
tie(s, e) = v[i];
// 시작 위치에 이미 널빤지가 있는지 확인
// 널빤지가 없는 곳으로 시작 위치 변경
if (s <= prev_e)
s = prev_e + 1;
// 끝 지점까지 널빤지 유무 확인 (이미 전부 덮고 있는가?)
if (s >= e)
continue;
// 웅덩이 길이 확인 후 널빤지 개수 체크.
int len = e - s;
cnt += len / L;
if (len % L) {
cnt++;
// 마지막 널빤지 좌표 체크.
prev_e = e + (L - (len % L))-1;
}
else
// 마지막 널빤지 좌표 체크.
prev_e = e-1;
}
cout << cnt;
}
[회고]
입력을 잘 안보고 해서 틀렸었다. 입력이 [ , ) 형식이어서 길이가 틀렸고, 순서대로 입력되지 않음.
잘 보자...
반응형
'C++ > 백준' 카테고리의 다른 글
[C++/백준] Solved.ac 2단계 (0) | 2024.07.15 |
---|---|
[C++/백준] 17136 색종이 붙이기 (0) | 2024.07.07 |
[C++/백준] 1486 등산 (0) | 2024.05.12 |
[C++/백준] 11066 파일 합치기 (0) | 2024.04.14 |
[C++/백준] 16434 드래곤 앤 던전 (1) | 2024.04.07 |