인프런 커뮤니티 질문&답변
5-Q 질문
해결된 질문
작성
·
13
0
안녕하세요! 문제 조건이 '웅덩이는 겹치지 않는다' 이기 때문에 현재와 다음 상태를 비교하여 코드를 짰는데 왜 틀린지 모르겠습니다
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, L;
cin >> N >> L;
vector<array<int, 2>> ar(N);
for (int i = 0; i < N; i++) {
int s, e;
cin >> s >> e;
ar[i] = {s, e - 1};
}
sort(ar.begin(), ar.end(), [](const auto& a, const auto& b) {
return a[0] < b[0];
});
int ret = 0;
int start = ar[0][0];
int end = ar[0][1];
for (int i = 0; i < N - 1; i++) {
auto& cur = ar[i];
auto& next = ar[i + 1];
if (next[0] - cur[1] >= L) {
int diff = end - start + 1;
ret += diff / L;
if (diff % L != 0) ret++;
start = next[0];
end = next[1];
} else {
end = next[1];
}
}
int diff = end - start + 1;
ret += diff / L;
if (diff % L != 0) ret++;
cout << ret << "\n";
return 0;
}
답변 2
0
안녕하세요 ㅎㅎ
이부분이 좀 걸리는데요.
| --- |
|-----|
이렇게 되어있을 때 새로운 s, e를 결정하는게
if (next[0] - cur[1] >= L) {바로 앞의 코드인데요.
cur[1]과 next[0]를 비교해야지 여기서 L이 갑자기 나오는 이유가 있을까요?
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. ililil님.
주어진 코드에서 문제를 해결하려는 방식은 적절하지만, 코드를 작성하는 과정에서 몇 가지 오류가 발생할 수 있습니다. 웅덩이는 겹치지 않는다는 조건을 고려하면서 시작점과 끝점을 계속 추적하고, 필요한 판자를 계산하는 방식을 사용하고 있습니다.
주요한 문제점과 개선 사항은 다음과 같습니다:
끝점 계산 오류: 웅덩이의 끝점을
e - 1로 설정하고 있지만, 웅덩이 시작점부터 끝점까지를 고려해야 합니다. 배열에 저장할 때e로 저장하고ar[i] = {s, e}로 하는 것이 더 명확할 수 있습니다.판자의 수를 계산하는 구문: 웅덩이가 겹치지 않는다고 가정하지만, 각 웅덩이에 대해 필요한 판자의 수를 계산할 때 각기 다른 웅덩이를 고려하여 누적해야 합니다.
ret값을 누적하기 전에 판자의 한 단위 길이에 대한 계산과, 웅덩이 길이에 따른 소수점 처리를 주의하세요.코드 로그의 위치 확인: for 루프 내부 및 외부에
ret을 증가시키는 부분에서 조건이 잘못 설정되어 있을 수 있으며, 전체 웅덩이 길이를 추적하여 매 웅덩이에 대해 새로운 판 사항을 계산할 때 로직이 초과될 수 있습니다.
아래는 이와 유사한 문제를 다룬 기존 게시물입니다. 참고하시어 코드 수정에 도움이 되시길 바랍니다:
이를 통해 웅덩이 계산이 잘못되거나 판자 배치 방식이 잘못되는 문제를 피할 수 있을 것입니다. 이처럼 작업을 스텝 바이 스텝으로 디버깅하여 문제를 해결해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





