푸앙이가 길을 건너간 이유
문제
흑석동은 최근 뉴타운 공사로 인하여 지나가면 안되는 위험 지역이 존재한다.
이 지역은 X축, Y축과 평행한 직사각형 형태로 이루어져 있다.
중앙대의 마스코트인 푸앙이는 직선 상의 경로를 따라서 흑석동을 통과하고 있다.
이 때 흑석동의 망령 호민이는 푸앙이가 위험지역에 지나갈 것 같다는 생각이 들었다.
따라서 푸앙이가 위험 지역을 지나가는지 여부를 알아내어서 푸앙이가 해당 지역을 지나가지 못하도록 조치를 취할 예정이다.
호민이를 위해 푸앙이가 위험 지역을 지나는 지 알려주는 프로그램을 작성해보자.
입력
첫째 줄에는 정수 A, B, C (-10,000 ≤ A, B ≤ 10,000, -100,000 ≤ C ≤ 100,000)가 주어진다.
해당 숫자들은 좌표 평면 상에서 Ax+By+C=0 형태로 표현되는 푸앙이가 지나가는 직선 상의 경로을 나타낸다.
(단 A, B 모두가 0인 경우는 직선의 방정식이 아니므로 주어지지 않는다.)
둘째 줄에는 정수 X1, X2, Y1, Y2 (-100,000 ≤ X1 < X2 ≤ 100,000, -100,000 ≤ Y1 < Y2 ≤ 100,000) 이 주어진다.
직사각형의 테두리들은 x = X1, x = X2, y = Y1, y = Y2 에 해당하는 직선에 포함된다.
출력
첫째 줄에 푸앙이가 위험지역을 통과하면 “Poor”를, 통과하지 않으면 “Lucky”을 출력하라.
위험 지역의 모서리만 통과하거나, 테두리 위로만 지나가는 경우는 위험지역을 통과하지 않는 것으로 간주한다.
수학적으로 생각해서 풀었는데 왜 안되는거지?
기울기 구해서 y절편 구해서 하는거 맞는데 왜지?
import sys
A, B, C = map(int,sys.stdin.readline().split())
x1, x2, y1, y2 = map(int,sys.stdin.readline().split())
if A == 0:
if y1 < -(C/B) < y2:
print("Poor")
else:
print("Lucky")
elif B == 0:
if x1 < -(C/A) < x2:
print("Poor")
else:
print("Lucky")
elif -(A/B) > 0:
if y1 + (A/B) * x2 < -(C/B) < y2 + (A/B) * x1:
print("Poor")
else:
print("Lucky")
else:
if y1 + (A/B) * x1 < -(C/B) < y2 + (A/B) * x2:
print("Poor")
else:
print("Lucky")
이해가 안된다....
이항해서 했더니 된다... 왜지? 알아 봐야겠다.
import sys
A, B, C = map(float,sys.stdin.readline().split())
x1, x2, y1, y2 = map(float,sys.stdin.readline().split())
if A == 0:
if y1 < -(C/B) < y2:
print("Poor")
else:
print("Lucky")
elif B == 0:
if x1 < -(C/A) < x2:
print("Poor")
else:
print("Lucky")
elif -(A/B) > 0:
if y1 < (-1)*(C+A*x2)/B and (-1)*(C+A*x1)/B < y2:
print("Poor")
else:
print("Lucky")
else:
if y1 < (-1)*(C+A*x1)/B and (-1)*(C+A*x2)/B < y2:
print("Poor")
else:
print("Lucky")