작성
·
200
0
안녕하세요 큰돌님,
for(int j = x1 + 1; j <= x2; j++){
cout << "j:" << j << " x2:" << x2 <<'\n';
_x[j]++;
}
해당 코드에서 범위가 j <= x2 마지막 꼭지점이 포함되는 이유를 모르겠습니다. 아래 조건을 준수하려면 마지막 꼭지점은 제외해야 할 것 같은 생각이 들어서요.
단, 수평선 H는 다각형의 어떤 수평선분과도 겹처 놓여서는 안 되고, 유사하게 수직선 V는 다각형의 어떤 수직선분과도 겹쳐 놓여서는 안 된다.
감사합니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
답변 1
0
안녕하세요 hkt님 ㅎㅎ
이거는 시각을 생각하시면 됩니다. 우리가 보통 시각을 기반으로 문제를 풀 때
이상 ~ 미만
또는
이값을 벗어나는 값 ~ 이하
이렇게 풀었던 거 기억나시나요? (1주차때 하는 내용입니다.)
문제에서 주어지는 구간은 그렇게 처리를 해주시면 됩니다.
이렇게 해도 맞습니다.
#include <bits/stdc++.h>
using namespace std;
#define y1 fuck
vector<int> check_x, check_y;
int n, x, y, x1, y1, x2, y2, _y[1000004], _x[1000004], ret;
pair<int, int> a[100004];
int main() {
cin >> n;
for(int i = 0; i < n; i++){
cin >> x >> y;
x += 500000;
y += 500000;
a[i] = {x, y};
check_x.push_back(x);
check_y.push_back(y);
}
a[n] = a[0];
for(int i = 0; i < n; i++){
tie(x1, y1) = a[i];
tie(x2, y2) = a[i + 1];
if(x1 != x2){
if(x1 > x2) swap(x1, x2);
for(int j = x1; j < x2; j++){
_x[j]++;
}
}
if(y1 != y2){
if(y1 > y2) swap(y1, y2);
for(int j = y1; j < y2; j++){
_y[j]++;
}
}
}
for(int a : check_y) ret = max(ret, _y[a]);
for(int a : check_x) ret = max(ret, _x[a]);
cout << ret << "\n";
}
감사합니다.