작성
·
117
0
http://boj.kr/f9e04dedecf9402eb6e1bcb1042dcfa6
선생님 안녕하세요.
선생님이 작성해주신 답이랑 비교해봤을 때, 차이가 나는 부분은 if문을 통해 idx가 a[i].first보다 큰지 작은지를 가른뒤, 계산해주는 부분밖에 없는 것 같습니다. 선생님께서는 a[i].second - a[i].first 또는 idx 이런식으로 직접 해주셨고, 저는 s라는 변수에 a[i].first 또는 idx 를 담아줘서 계산해준 것 밖에 차이가 없다고 생각하는데요.
어떤부분이 달라서 정답이 아니라고 나오는 걸까요??
(if(a[i].second <= idx) continue; 이부분은 문제에 웅덩이는 겹치지 않는다는 조건이 있어서 넣지않았습니다.)
답변 1
0
안녕하세요 google님 ㅎㅎ
int tmp = (end - s) / l;
if ((end - s) % l != 0)
{
tmp++;
}
이부분이 틀린 것 같습니다.
나머지부분은 잘 짜셨습니다.
제가 좀 다듬어 봤는데요. ㅎㅎ
#include <bits/stdc++.h>
using namespace std;
int n, l, a, b;
vector<pair<int, int>> v;
int main() {
cin >> n >> l;
for (int i = 0; i < n; i++) {
cin >> a >> b;
v.push_back({a, b});
}
sort(v.begin(), v.end());
int cnt = 0;
int e = 0;
for (int i = 0; i < n; i++) {
int start = v[i].first;
int end = v[i].second;
int s;
if (e > start) {
s = e;
} else {
s = start;
}
int tmp = (end - s + l - 1) / l;
cnt += tmp;
e = s + (tmp * l);
}
cout << cnt << "\n";
return 0;
}
이렇게 해보시겠어요?
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
와, 이렇게 하니깐 통과합니다. 감사합니다!
그런데, 이해가 잘 가지 않습니다.
1.
이거랑
이부분이 무슨 차이가 있을까요?
둘 다 나머지가 있다면 1을 더해주는데, 같은거 아닌가요??
2.
이 코드의 의미가 궁금합니다.
답변해주셔서 감사합니다. 선생님. 항상 건강 잘챙기세요!