백준 BaekJoon 16431번: 베시와 데이지 [Java] 자바

2020-11-17


문제

농부 존은 소 베시와 소 데이지를 키우고 있습니다.

두 소는 자유롭게 1,000 × 1,000 2차원 격자 목초지를 누비며 놀고 있습니다. 농부 존이 종을 치면 베시와 데이지가 농부 존이 있는 곳으로 달려갑니다. 

베시가 B에 있을 때 1초 후에 움직일 수 있는 칸과 데이지가 D에 있을 때 1초 후에 움직일 수 있는 칸을 나타낸 그림

 

베시는 1초 후에 꼭짓점을 공유하는 8개의 칸 중 하나로 이동할 수 있고 데이지는 1초 후에 변을 공유하는 4개의 칸 중 하나로 이동할 수 있습니다. 칸들은 충분히 넓어서 칸 하나에도 베시와 데이지 그리고 존이 같이 서 있을 수 있습니다. 

베시와 데이지 두 소 모두 최단 경로로 존에게 갈 때 어떤 소가 더 빨리 도착할까요?

 

입력

첫 번째 줄에 베시의 좌표 Br, Bc (1 ≤ Br, Bc ≤ 1,000) 이 주어집니다.

두 번째 줄에 데이지의 좌표 Dr, Dc (1 ≤ Dr, Dc ≤ 1,000) 이 주어집니다.

세 번째 줄에 존의 좌표 Jr, Jc (1 ≤ Jr, Jc ≤ 1,000) 이 주어집니다.

처음에 존이 있는 칸에는 베시와 데이지가 없음이 보장됩니다.

출력

첫 번째 줄에 베시가 더 빨리 도착하면 'bessie', 데이지가 더 빨리 도착하면 'daisy', 동시에 도착하면 'tie' 를 출력합니다.


import java.util.Scanner;

public class TemplateA {
    public static void main(String[] args){
    	
		Scanner scan = new Scanner(System.in);
    	
    	int []bessie = new int [2];
		int []daisy = new int [2];
		int [] arr = new int [2];
		
		for(int i = 0; i < 2; i++) {
			bessie[i] = scan.nextInt();
		}
		
		for(int i = 0; i < 2; i++) {
			daisy[i] = scan.nextInt();
		}
		
		for(int i = 0; i < 2; i++) {
			arr[i] = scan.nextInt();
		}
		
		bessie[0] = Math.abs(bessie[0] - arr[0]);
		bessie[1] = Math.abs(bessie[1] - arr[1]);
		int bCount = bessie[0] >= bessie[1] ? bessie[0] : bessie[1];
		//한턴에 모든 방향으로 이동 가능하기때문에 행이나 열중 차이가 큰게 그 턴에 최대 이동값이된다.
		//때문에 행이나 열중 차이가 큰 값이 최소 이동거리가 된다.
		daisy[0] = Math.abs(daisy[0] - arr[0]);
		daisy[1] = Math.abs(daisy[1] - arr[1]);
		int dCount = daisy[0] + daisy[1];
		//한턴에 행이나 열중 하나 만 움직일 수 있으므로,
		//주어진 목적지의 행열의 각 차이가 최소 이동거리가 된다.
		
		if(bCount < dCount) {
			System.out.println("bessie");
		}else if(bCount > dCount) {
			System.out.println("daisy");
		}else {
			System.out.println("tie");
		};
    }
}

출처링크: www.acmicpc.net/problem/16431

 

16431번: 베시와 데이지

베시는 (3, 5) > (2, 4) > (2, 3) 경로로 이동하여 존에게 오는데 2초가 걸립니다. 반면 데이지는 (1, 1) > (1, 2) > (1, 3) > (2, 3) 경로로 이동하여 존에게 오는데 3초가 걸리므로 베시가 더 빨리 도착합니다.

www.acmicpc.net