-
6064 카잉달력 본문
매우 어려운 규칙이 있을것이라 생각하고 삽질만 했다.
사실 loop 돌면서 조건에 따라 카운트만 해주면 되는것! 이 문제 또한 문제를 제대로 파악하지 못해 특정 조건을 캐치하지 못했다.
하지만 시관초과.
코드:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int x, y, M, N,T=0;
cin >> T;
while (T--)
{
int i = 1, j = 1,cnt=1;
bool flag = false;
cin >> M >> N >> x >> y;
while (true)
{
if (i == M && j == N)
{
break;
}
if (i > M) i = 1;
if (j > N) j = 1;
if (i == x && j == y)
{
flag = true;
break;
}
cnt++; i++; j++;
}
if(flag) cout << cnt<<endl;
else cout << -1<<endl;
}
return 0;
}
구글링과 다른 분들의 코드를 짬뽕해본 결과
#include <iostream>
using namespace std;
int lcm(int M, int N)
{
int z, a, b;
a = M; b = N;
while (true)
{
z = a % b;
if (z == 0) break;
a = b; b = z;
}
return (M*N) / b;
}
int main()
{
int x, y, M, N,T=0;
cin >> T;
while (T--)
{
int i = 1, j = 1,cnt=1,p;
bool flag = false;
cin >> M >> N >> x >> y;
p = lcm(M, N);
while (x!=y&&x<=p)
{
if (x < y) x += M;
else y += N;
}
if(x!=y) cout << -1<<endl;
else cout <<x<<endl;
}
return 0;
}
확실히 해답을 찾는데 루프를 적게 돈다.
내가 짠 코드는 33번을 돌아야 루프를 돈 만큼의 횟수가 답이인 반면
이 코드는 아직 잘 이해가 안간다. 최소공배수를 왜 사용하는것인지. 복습해서 이해하자.
'Algorithm > Baekjoon' 카테고리의 다른 글
2751-병합정렬[아직 해결못함] (0) | 2018.01.10 |
---|---|
2750 - 버블정렬 (0) | 2018.01.09 |
1475 (0) | 2018.01.04 |
2775 (0) | 2018.01.03 |
10250 (0) | 2018.01.03 |