flow-vector
Published 2023. 2. 8. 11:07
BOJ 6064 카잉 달력 PS/BOJ

문제 링크

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

시간, 공간 제한

시간 : 1초

공간 : 256mb

문제 접근 방향

- M, N 이 주어 졌을 때 마지막 해는 M과N의 최소 공배수 라는 것을 파악함

- 최소 공배수와 최대 공약수를 어떻게 구하는지 찾아 봄

// 유클리드 호제법을 사용한 최대 공약수 찾기
int gcd(int a, int b)
{
	if (b == 0)
    	return a;
    return gcd(b, a%b);
 }
 
 // 최소 공배수
 // a x b = gcb(a, b) x lcm(a, b)
 // lcm = a /gcb * b
 
 int lcm(a, b)
 {
	return a / gcb(a, b) * b;
 }

- <x, y> 라면 어떤 해를  M으로 나눴을 때  x가 남고 N으로 나눴을 때 y가 남는 해를 찾아 내야 한다는 것을 알게 됨

-> 최소 공배수까지 루프 돌면서 조건에 맞는 해를 찾아 낼 수 있음

int l = lcm (a, b);
for (int i = x; i < l; i+=m) // 최소 공배수까지 모든 정수를 탐색 하지 않고 m으로 나눴을 때 나머지가 x인 수만 탐색하기
{
	// 조건 체크 : 나눴을 때 y가 남는지
    return i;
}
return (-1);

배운점

- 최소 공배수와 최대 공약수를 구하는 방법

'PS > BOJ' 카테고리의 다른 글

BOJ 9375 패션왕 신해빈  (0) 2023.02.08
BOJ - 9996  (0) 2023.02.01
BOJ - 2309 일곱난쟁이  (0) 2023.01.18
profile

flow-vector

@flow-vector

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!