스터디사이트 : 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문이 참 많고.. 더럽구나 ㅋ
| |||
- |
다른 사람이 한 코딩
| |||
- |
'JAVA > JAVA 자료구조 알고리즘' 카테고리의 다른 글
JAVA 자료구조 : 버블정렬 (0) | 2016.07.21 |
---|---|
JAVA 자료구조 : Queue 와 Stack (0) | 2016.07.18 |
JAVA 자료구조 : 링크드 리스트(Linked List) (0) | 2016.07.14 |
JAVA 알고리즘 : 6 x 6 배열 안의 모래시계집합들의 합 중 최대합 구하기 (0) | 2016.07.11 |
JAVA 알고리즘 : 10진수에서 2진수 변환 후 출력되는 1의 최대 연속자릿수 구하기 (0) | 2016.07.10 |