문제
한때 굉장히 유행하고 유명했던 게임, PLAYERJINAH’S BOTTLEGROUNDS는 FPS(First-Person Shooter) 장르의 게임이다. 전 세계적으로 많은 사람을 열광시킨 이 게임은 영화 Bottle Royale 을 모티브로 만들어졌다. 영화 Bottle Royale 에서는 한 학급의 학생들을 한 섬에 가두고, 그들에게 각자 병을 지급한 뒤, 단 한 명의 승자가 남을 때까지 서로 병 던지기를 시키는 내용이 나온다. 이 게임은 그와 비슷하게 100명의 플레이어가 각자 거대한 수송기에서 낙하산으로 낙하하여 한 명의 승자가 남을 때까지 진행된다.
이 게임을 즐기는 진아는 굉장한 실력의 게이머로서, 그녀의 실력은 화면 속의 적을 동시에 3명까지 맞춰 쓰러뜨릴 정도로 잘한다. 대신에 그녀가 제 실력을 발휘하기 위해선 한 가지 조건이 있다. 그건 적들이 진아의 화면 속에서 직선으로 있을 때만 동시에 쓰러뜨릴 수 있다는 것인데, 몇 번의 승부로 이를 알아챈 준서는 BOTTLEGROUNDS 대회에서 진아를 쓰러뜨리고 우승하기 위해 같은 스쿼드의 팀원들과 특훈을 시작했다. 특훈 내용은 상대방의 화면 속에서 각자의 위치가 직선이 안 되도록 포지션을 잡는 것이다. 준서는 이 연습을 위해서 당신에게 현재 팀원들의 상대방 화면 속 위치들이 직선이 되는지를 판별하는 기계를 만들어 달라고 요청했다. 당신에게 의뢰비로 대회 상금의 30%를 약속했기 때문에 당신은 흔쾌히 제안을 수락했다. 이제 그들에게 전달할 기계의 프로그램을 만들어 보도록 하자.
화면 속 아군 위치의 예시. 이 경우 팀원들은 직선상에 위치한다.
입력
프로그램의 입력은 표준 입력으로 받는다. 스쿼드는 총 4명으로 구성되며 준서는 멀리서 저격을 하기 때문에 좌표가 주어지지 않는다. 따라서 첫 번째 줄부터 세 번째 줄까지 x, y (1 ≤ x, y ≤ 1000) 두 개의 자연수가 각각 주어진다. 각 줄의 x, y는 한 명의 팀원이 상대방 화면에서 어떤 위치인지 나타낸다. 그리고 팀원들은 항상 서로 다른 위치에 있다.
출력
프로그램의 출력은 표준 출력으로 한다. 팀원의 위치가 직선이 될 때 ‘WHERE IS MY CHICKEN?’ 을, 아닌 경우 ‘WINNER WINNER CHICKEN DINNER!’ 를 출력한다.
풀이
우선 문제를 시작하기 전에 필자는 CCW개념을 몰라서 직접 풀었다.
우선 x와 y좌표를 배열을 통해서 짝지어서 넣어준뒤 후에 기울기를 구할때 Exception이 발생하는 것을 방지하기 위해 미리 앞에서 몇가지 작업을 거쳐 주었다. 우선 x의 값이 모두 같을때는 일직선이다. 그 중에서 2개만 같은 경우는 무조건 일직선이 아니게 되므로 이를 따로 반복문을 통해 x와 y를 각각 처리해주었다.
이후 점과 점 사이의 기울기 (y2-y1)/(x2-x1)과 (y3-y2)/(x3-x2)가 같다면 일직선으로 볼 수 있다. 주의해야할 점은 double로 형변환을 해주면 완료. 하고 나니까 너저분한게 숏코드는 진즉에 포기했다....수학공부를 더해야하나부다;;;ㅇㅅㅇ;;;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int [][]arr=new int[3][2];
for(int i=0;i<3;i++) {
StringTokenizer st = new StringTokenizer(br.readLine()); //토큰화
arr[i][0]=Integer.parseInt(st.nextToken());
arr[i][1] =Integer.parseInt(st.nextToken()); //배열 입력
}
double [] hx= new double[2]; // 기울기 측정 배열선언
String result ="";
//y축이 같을경우
if(arr[0][1]==arr[1][1]||arr[0][1]==arr[2][1]||arr[1][1]==arr[2][1]) {
if(arr[0][1]==arr[1][1] && arr[1][1]==arr[2][1]) {
result="WHERE IS MY CHICKEN?";
}
else {
result="WINNER WINNER CHICKEN DINNER!";
}
}
//x축이 같을경우
else if(arr[0][0]==arr[1][0] ||arr[1][0]==arr[2][0]||arr[0][0]==arr[2][0]) {
if(arr[0][0]==arr[1][0] && arr[1][0]==arr[2][0]) {
result="WHERE IS MY CHICKEN?";
}
else {
result="WINNER WINNER CHICKEN DINNER!";
}
}
//모두 다를때 기울기를 배열에 저장 , 같으면 일직선이다
else {
for(int i=0;i<2;i++) {
hx[i]=((double)(arr[i+1][0]-arr[i][0])/(double)(arr[i+1][1]-arr[i][1]))*10/10;
}
if(hx[0]==hx[1]) {
result="WHERE IS MY CHICKEN?";
}
else {
result="WINNER WINNER CHICKEN DINNER!";
}
}
}
}
|
https://www.acmicpc.net/problem/15803
'Algorithms > BOJ[Java]' 카테고리의 다른 글
[백준/15740번] A+B - 9 [Java] (0) | 2019.12.22 |
---|---|
[백준/5533번] 유니크(JOI 2013)[Java] (0) | 2019.12.22 |
[백준/2676번] 라스칼 삼각형(2011 Greater New York Programming Contest )[Java] (0) | 2019.12.20 |
[백준/7326번] Number Steps (Tehran Site 2000)[Java] (0) | 2019.12.17 |
[백준/10709번] 기상캐스터(JOI 2015)[Java] (0) | 2019.12.17 |