백준 PLAYERJINAH’S BOTTLEGROUNDS

KIMYEONGJUN·3일 전
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

프로그램의 입력은 표준 입력으로 받는다.
스쿼드는 총 4명으로 구성되며 준서는 멀리서 저격을 하기 때문에 좌표가 주어지지 않는다.
따라서 첫 번째 줄부터 세 번째 줄까지 x, y (1 ≤ x, y ≤ 1000) 두 개의 자연수가 각각 주어진다.
각 줄의 x, y는 한 명의 팀원이 상대방 화면에서 어떤 위치인지 나타낸다.
그리고 팀원들은 항상 서로 다른 위치에 있다.

프로그램의 출력은 표준 출력으로 한다.
팀원의 위치가 직선이 될 때 ‘WHERE IS MY CHICKEN?’ 을, 아닌 경우 ‘WINNER WINNER CHICKEN DINNER!’ 를 출력한다.

내가 이 문제를 보고 생각해본 부분

입력으로 3명의 팀원 좌표를 받는다. 
각 줄마다 x, y 값을 공백으로 구분해서 읽는다.
점 A, B, C로 좌표를 지정하고, 외적을 계산한다.
외적 값이 0이면 세 점이 직선상에 있으므로 "WHERE IS MY CHICKEN?"을 출력한다.
그렇지 않으면 직선이 아니므로 "WINNER WINNER CHICKEN DINNER!"을 출력한다.
외적을 사용한 기하학적 직선 점 판단은 기울기 비교보다 부동소수점 오차가 없고 간단해서 많이 사용된다.

코드로 구현

package baekjoon.baekjoon_33;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

// 백준 15803번 문제
public class Main1350 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 세 팀원의 좌표 입력 받기
        String[] p1 = br.readLine().split(" ");
        String[] p2 = br.readLine().split(" ");
        String[] p3 = br.readLine().split(" ");

        int x1 = Integer.parseInt(p1[0]);
        int y1 = Integer.parseInt(p1[1]);
        int x2 = Integer.parseInt(p2[0]);
        int y2 = Integer.parseInt(p2[1]);
        int x3 = Integer.parseInt(p3[0]);
        int y3 = Integer.parseInt(p3[1]);

        // 외적 계산
        int cross = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1);

        // 한 직선상 여부 판별
        if (cross == 0) {
            System.out.println("WHERE IS MY CHICKEN?");
        } else {
            System.out.println("WINNER WINNER CHICKEN DINNER!");
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글