-

6064 카잉달력 본문

Algorithm/Baekjoon

6064 카잉달력

Boogallee 2018. 1. 9. 14:05



매우 어려운 규칙이 있을것이라 생각하고 삽질만 했다.


사실   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
Comments