본문 바로가기
알고리즘/문제

[백준] 18512. 점프 점프 <C++>

by 코드 이야기 2020. 4. 24.
728x90

https://www.acmicpc.net/problem/18512

 

18512번: 점프 점프

첫째 줄에 두 사람이 한 번에 멀리뛰기를 하는 거리 X, Y와 시작 지점의 위치 값 P1, P2가 각각 공백을 기준으로 구분되어 자연수로 주어진다. (1 ≤ X, Y, P1, P2 ≤ 100)

www.acmicpc.net

 

 

 

 

 

*내 코드의 전체적인 설명*

 

10 12 30 8 을 입력받으면

 

30과 8을 비교 -> 둘이 다르므로 더 작은 녀석을 키워줌.

30과 20을 비교 -> '''

30과 32를 비교 -> '''

40과 32를 비교 -> '''

40과 44를 비교 -> '''

50과 44를 비교 -> '''

50과 56을 비교 -> '''

60과 56을 비교 -> '''

60과 68을 비교 -> '''

70과 68을 비교 -> '''

70과 80을 비교 -> '''

80과 80을 비교 -> 같으므로 80을 출력하고, 반복문을 종료

 

 

 

 

1) 입력을 받아준다.

 

2) p2가 더 작으므로 p2를 키워준다.

 

3) p1이 더 작으므로 p1을 키워준다.

 

4) 두 수가 같으므로 그 수를 출력하고 종료한다.

 

5) 만약 두 수를 아무리 더해도 같아지지 않는다면 -1을 출력하고 종료시킨다.

    10000으로 비교를 해주는 이유는 입력 값의 최대 범위는 100이다. 

    -1이 나올 수 있는 최대의 경우인 100 100 100 99를 입력받았을 때 10000까지는 비교해봐야 하기 때문이다.

    조금 무식한 방법이다. 나중에 최적화를 해보아야겠다.

 

#include <iostream>
using namespace std;

int x, y, p1, p2, i, j;

int main() {
  cin>>x>>y>>p1>>p2;	//1)

 while(1)
  {
    if(p1>p2)		//2)
      p2+=y;
      
    else if(p1<p2)	//3)
      p1+=x;
      
    else		//4)
    {
      cout<<p1;
      break;
    } 

    if(p1>10000 || p2>10000)	//5)
    {
      cout<<-1; 
      break;
    }
  }
}
728x90

댓글