파게로그

[백준 20206번] 푸앙이가 길을 건너간 이유 본문

콤퓨타 왕왕기초/PS

[백준 20206번] 푸앙이가 길을 건너간 이유

파게 2021. 4. 13. 06:56

문제 링크: 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