파게로그
[백준 20206번] 푸앙이가 길을 건너간 이유 본문
문제 링크: 20206번 푸앙이가 길을 건너간 이유
https://www.acmicpc.net/problem/20206
[x1, x2]에서 일차함수 by=-ax-c(b!=0)은 최솟값과 최댓값을 지니며, ①최솟값이 위험 범위의 최대 y값보다 크거나 같으면, 또는 ②최댓값이 위험 범위의 최소 y값보다 작거나 같으면 푸앙이는 위험 지역을 지나지 않을 수 있다. 요컨대, by>-ax1-c && by>ax2-c || by<ax1-c && by<ax2-c를 만족시키면 된다.
특이 케이스로 b=0일 때, 즉 ax+c=0을 만족하는 기하학적 그래프 G는 y축에 평행한 직선으로서 ax+c=0의 y값은 모든 실수, 즉 (-∞, ∞)의 범위를 가진다. 곧 y값은 고려할 필요 없이, x1 < -c/a < x2이면 이는 반드시 위험 구역을 지남을 의미한다. a>0일 때 ax1 + c < 0 < ax2 + c이면 위험 구역을 지나고 a<0일 때 ax1 + c > 0 > ax2 + c이면 위험 구역을 지난다는 것이다. -1을 곱해주면 -ax1 - c > 0 > -ax2 - c (a<0), -ax1 - c < 0 < -ax2 - c (a>0)을 뜻하며, b=0일 때 dangerMiny, dangerMaxy는 모두 0이므로 코드에서의 판별 조건과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] line;
line = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int a = line[0];
int b = line[1];
int c = line[2];
line = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int x1 = line[0];
int x2 = line[1];
int y1 = line[2];
int y2 = line[3];
int dangerMiny, dangerMaxy;
int pathMiny, pathMaxy;
// path
int t1 = -1 * a * x1 - c;
int t2 = -1 * a * x2 - c;
pathMiny = t1 < t2 ? t1 : t2;
pathMaxy = t1 > t2 ? t1 : t2;
// danger
t1 = b * y1;
t2 = b * y2;
dangerMiny = t1 < t2 ? t1 : t2;
dangerMaxy = t1 > t2 ? t1 : t2;
if (pathMiny >= dangerMaxy || pathMaxy <= dangerMiny)
System.out.print("Lucky");
else
System.out.print("Poor");
}
}
'콤퓨타 왕왕기초 > PS' 카테고리의 다른 글
[백준 20191번] 줄임말 (0) | 2021.05.06 |
---|---|
[백준 1406번] 에디터 (0) | 2021.04.13 |
[백준 2346번] 풍선 터뜨리기 (0) | 2021.04.13 |
[백준 2840번] 행운의 바퀴 (0) | 2021.04.13 |
[백준 17413번] 단어 뒤집기 2 (0) | 2021.04.08 |
Comments