본문 바로가기
Algorithm

[구현/수학] 백준 16431 베시와 데이지 - Python

by jangThang 2022. 2. 27.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    16431번: 베시와 데이지

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     베시와 데이지, 존의 위치(x, y)가 주어집니다. 베시는 상하좌우와 '대각선' 한 칸을 이동할 수 있고, 데이지는 상하좌우 한 칸만 이동가능합니다. 셋의 위치가 주어졌을 때, 존에게 더 빨리 가는 사람을 구해야 합니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    [ Contents ] 1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하

    star7sss.tistory.com

     먼저 상하좌우만 이동가능한 '데이지'가 필요한 이동횟수를 생각해봅시다. 존과의 x좌표 차이와 y좌표 차이만큼의 이동이 필요하고, 그 둘을 합하면 필요한 이동횟수가 나옵니다.

     반면 '베시'는 대각선 이동이 가능합니다. 데이지는 x축으로 1번, y축으로 1번 가야하는 거리를 베시는 '1번'에 갈 수 있습니다. 따라서 x좌표로 이동해야하는 거리와 y좌표로 이동해야하는 거리 중 큰 값이 이동횟수가 됩니다.

     

     Ex) x좌표로 3, y좌표로 2만큼 차이난다면

     데이지가 필요한 이동횟수는 3+2 = 5이며, 반면 베시는 '대각선으로 2번 이동'하고 x좌표로 1번 이동하면 됩니다.

     

     

     

    3. 코드

    bessie = list(map(int, input().split()))
    daisy = list(map(int, input().split()))
    john = list(map(int, input().split()))
    
    bessie_turn = max(abs(john[0]-bessie[0]), abs(john[1]-bessie[1])) #x축 이동과 y축 이동 중 큰 값
    daisy_turn = abs(john[0]-daisy[0])+abs(john[1]-daisy[1]) #x축 이동과 y축이동의 합
    
    if bessie_turn < daisy_turn:
        print('bessie')
    elif bessie_turn > daisy_turn:
        print('daisy')
    else:
        print('tie')

     

     

    star가 되고나서 Tistory

    반응형

    댓글