프로그래밍/백준

[알고리즘] 백준 15803 파이썬 - PLAYERJINAH’S BOTTLEGROUNDS (CCW 알고리즘)

매 석 2023. 2. 17. 15:24
반응형

한때 굉장히 유행하고 유명했던 게임, PLAYERJINAH’S BOTTLEGROUNDS는 FPS(First-Person Shooter) 장르의 게임이다. 전 세계적으로 많은 사람을 열광시킨 이 게임은 영화 Bottle Royale 을 모티브로 만들어졌다. 영화 Bottle Royale 에서는 한 학급의 학생들을 한 섬에 가두고, 그들에게 각자 병을 지급한 뒤, 단 한 명의 승자가 남을 때까지 서로 병 던지기를 시키는 내용이 나온다. 이 게임은 그와 비슷하게 100명의 플레이어가 각자 거대한 수송기에서 낙하산으로 낙하하여 한 명의 승자가 남을 때까지 진행된다.

이 게임을 즐기는 진아는 굉장한 실력의 게이머로서, 그녀의 실력은 화면 속의 적을 동시에 3명까지 맞춰 쓰러뜨릴 정도로 잘한다. 대신에 그녀가 제 실력을 발휘하기 위해선 한 가지 조건이 있다. 그건 적들이 진아의 화면 속에서 직선으로 있을 때만 동시에 쓰러뜨릴 수 있다는 것인데, 몇 번의 승부로 이를 알아챈 준서는 BOTTLEGROUNDS 대회에서 진아를 쓰러뜨리고 우승하기 위해 같은 스쿼드의 팀원들과 특훈을 시작했다. 특훈 내용은 상대방의 화면 속에서 각자의 위치가 직선이 안 되도록 포지션을 잡는 것이다. 준서는 이 연습을 위해서 당신에게 현재 팀원들의 상대방 화면 속 위치들이 직선이 되는지를 판별하는 기계를 만들어 달라고 요청했다. 당신에게 의뢰비로 대회 상금의 30%를 약속했기 때문에 당신은 흔쾌히 제안을 수락했다. 이제 그들에게 전달할 기계의 프로그램을 만들어 보도록 하자.

화면 속 아군 위치의 예시. 이 경우 팀원들은 직선상에 위치한다.

 

 

문제풀이

a=[]
for _ in range(3):
    a.append(list(map(int,input().split())))
#01
def ccw():
    tmp = a[0][0]*a[1][1]+a[1][0]*a[2][1]+a[2][0]*a[0][1]
    tmp -= (a[0][1]*a[1][0]+a[1][1]*a[2][0]+a[2][1]*a[0][0])
    return tmp
#02
if ccw()==0:
        print("WHERE IS MY CHICKEN?")
else:
    print("WINNER WINNER CHICKEN DINNER!")

- #01 : CCW 알고리즘을 사용하여 "평면에 놓여진 세 점의 방향관계"를 구한다.

           시계방향이면 "음수", 시계반대방향이면 "양수", 평행관계라면 "0"이다.

- #02 : CCW 값이 0이라면 평행관계, 즉 직선상에 위치하기에 해당 값을 출력한다.

           그렇지 않다면 그에 맞는 값을 출력한다.

 

 

+ CCW 알고리즘 : "평면에 놓여진 세 점의 방향관계를 구하는 알고리즘"

   공식 :  x1y2 + x2y3 + x3y1 - (x2y1 + x3y2 + x1y3) 

   공식의 값 : 양수(시계반대방향), 음수(시계방향), 0(평행관계)

 

더 자세한 설명은 아래 링크를 참조

 

CCW (Counter-ClockWise) - (1)

CCW (Counter-ClockWise) - (1) CCW 알고리즘은 수 계산에서의 사칙연산처럼, '기하 알고리즘'에서 가장 기본적인 알고리즘이다. 즉, 기하 알고리즘에서 매우 자주 이용된다는 뜻이다. 우선 이 게시글에서

rebro.kr