728x90
반응형
20206번: 푸앙이가 길을 건너간 이유
문제
https://www.acmicpc.net/problem/20206
20206번: 푸앙이가 길을 건너간 이유
첫째 줄에는 정수 A, B, C (-10,000 ≤ A, B ≤ 10,000, -100,000 ≤ C ≤ 100,000)가 주어진다. 해당 숫자들은 좌표 평면 상에서 Ax+By+C=0 형태로 표현되는 푸앙이가 지나가는 직선 상의 경로을 나타낸다. (단
www.acmicpc.net
풀이
Ax+By+C=0 형태의 표현되는 직선 상의 경로가 직사각형을 통과하는지 여부를 묻는 문제입니다.
Ax+By≤-C 또는 Ax+By≥-C로 식을 바꾸어 생각해야합니다. 문제에서 테두리 위로만 지나가는 경우는 위험지역을 통과하지 않는 것으로 간주한다고 했으므로 등호를 포함해야합니다. 어느 한 점의 좌표 (x, y)에 대해 위 식을 만족하면 각각 직선보다 아래에 있음을, 위에 있음을 나타냅니다.(만날 수도 있습니다.)
만약 직사각형의 네 점이 모두 직선의 아래에 있거나 위에 있으면 직선은 직사각형을 통과하지 않습니다. 따라서 Lucky를 출력합니다. 그렇지 않은 경우 Poor를 출력합니다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
cin.tie(0)->sync_with_stdio(0);
int a, b, c;
cin >> a >> b >> c;
int x1, x2, y1, y2;
cin >> x1 >> x2 >> y1 >> y2;
vector<pair<int, int>> v;
v.push_back({x1, y1});
v.push_back({x1, y2});
v.push_back({x2, y1});
v.push_back({x2, y2});
int u = 0, d = 0;
for (auto i : v) {
if (a * i.first + b * i.second <= -c)
d++;
if (a * i.first + b * i.second >= -c)
u++;
}
if (u == 4 || d == 4)
cout << "Lucky";
else
cout << "Poor";
return 0;
}
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[백준 / BOJ] C++ 16922 로마 숫자 만들기 (2) | 2024.07.21 |
---|---|
[백준 / BOJ] C++ 14715 전생했더니 슬라임 연구자였던 건에 대하여 (Easy) (67) | 2023.09.29 |
[백준 / BOJ] C++ 15925 욱제는 정치쟁이야!! (60) | 2023.09.28 |
[백준 / BOJ] C++ 24265 알고리즘 수업 - 알고리즘의 수행 시간 4 (2) | 2023.09.14 |
[백준 / BOJ] C++ 24264 알고리즘 수업 - 알고리즘의 수행 시간 3 (1) | 2023.09.14 |