스터디사이트 : https://www.hackerrank.com



JAVA 알고리즘 : 두 캥거루가 만나는 지점 구하기



※ 조건


  • 두 캥거루가 x축에서 양의 방향으로 뛴다 (ㅋ)
  • 두 캥거루는 각각 위치 x1, x2에서 점프를 시작해서 v1, v2만큼 점프를 한다.
  • 두 캥거루가 점프를 하다가 서로 같은 위치에 도달하면 "YES"를 출력, 도달하지 않는다면 "NO"를 출력
    ※ 점프 시도횟수가 같아야만 "YES" 를 출력할 수 있다.
       = 
    두 캥거루가 만나려면 두 캥거루의 점프시도횟수가 같아야만 한다.
  • 0 <= x1 < x2 <= 10000
    0 <= v1 <= 10000
    0 <= v2 <= 10000




※ 주어진 코드

: 아래 표시된 영역 안에서만 코딩 할 것.

public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        int x1 = in.nextInt();

        int v1 = in.nextInt();

        int x2 = in.nextInt();

        int v2 = in.nextInt();

/* 이곳에 코딩 */

}



입력 1

0 3 4 2

출력 1

YES


입력 2

0 2 5 3

출력 2

NO


디버깅1

공식을 만들어야 할 것 같다...

캥거루1의 거리 : x1 + jump * v1

캥거루2의 거리 : x2 + jump * v2

( jump : 점프 횟수 )


(캥거루1의 거리) = (캥거루2의 거리) 가 되는 순간의 두 jump가 서로 같으면 "YES"를 출력시키면 되는 것이다.

x1 + jump * v1 = x2 + jump * v2;

jump = (x2-x1)/(v1-v2);


- 그리고 jump변수는 캥거루의 점프 횟수이므로 소수점이 나올 수가 없다.

- 위의 공식을 그대로 밀고 붙이기 위해서는 v1=v2 이면 무조건 jump가 0이 나오므로 0이 나오면 "NO"가 출력되게 해야 한다.


여기서 제일 큰 착각을 했던 것은,

'캥거루가 점프한 거리는 10000이 넘으면 안된다' 는 제약조건은 없는데 자꾸 이 제약조건을 조건문에 넣었다는 것이다... (ㅋㅋ)

예를 들면 이런 것)

kang1_leng = x1 + jump*v1;

kang2_leng = x2 + jump*v2;

if(kang1_leng >=10000 || kang2_leng >=10000) {

jump=0;

break;

} //end if



결과

이렇게 해서 나온.. 결과다. if문이 참 많고.. 더럽구나 ㅋ

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
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int x1 = in.nextInt();
        int v1 = in.nextInt();
        int x2 = in.nextInt();
        int v2 = in.nextInt();
        
        if(v1 == v2){
            System.out.println("NO");
        }else{
            float jump_f=(x2-x1)%(v1-v2);
            int jump=(x2-x1)/(v1-v2);
            int leng = x2 + jump*v2;
 
            if(x2<=x1){
                System.out.println("NO");
            }
 
            if(jump_f>0 || jump<=0){
                System.out.println("NO");
            }else{
                System.out.println("YES");
            } //end if
        } //end if
    }
cs

-



다른 사람이 한 코딩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int x1 = in.nextInt();
    int v1 = in.nextInt();
    int x2 = in.nextInt();
    int v2 = in.nextInt();
 
    int dx = x1 - x2;
    int dv = v2 - v1;
 
    if(dv == 0) {
        System.out.println("NO");
    } else if((dx % dv == 0&& (dx / dv > 0)) {
        System.out.println("YES");
    } else {
        System.out.println("NO");
    }
}
 
cs

-


+ Recent posts