728x90
https://www.acmicpc.net/problem/18512
*내 코드의 전체적인 설명*
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
'알고리즘 > 문제' 카테고리의 다른 글
구름 문제은행 (진법 변환) <C++> (0) | 2020.05.30 |
---|---|
[백준] 18883. N M 찍기 <C++> (0) | 2020.04.27 |
[백준] 4344. 평균은 넘겠지 <C++> (0) | 2020.04.17 |
[백준] 17608. 막대기 <C++> (0) | 2020.04.16 |
[백준] 10798. 세로읽기 <C++> (1) | 2020.04.16 |
댓글