소스코드
#include <stdio.h>
#include <string.h>
int main (){
int a, b, i;
scanf("%d %d", &a, &b);
int ans1, ans2;
int temp = 1;
while(1){
if ((temp*a)%b == 0) {
ans2 = temp*a;
break;
}
temp++;
}
for(i=1; i<=a; i++){
if (a%i == 0 && b%i == 0) {
ans1 = i;
}
}
printf("%d\n%d", ans1, ans2);
}
해설
이것도 한번만에 풀었다. 진짜 늘었나? (아님)
최대공약수: for loop로 i를 돌리면서, a, b 두 수를 나누었을 때의 나머지가 둘 다 0이 되는 경우를 계속 갱신하며 저장
->가장 큰 값이 출력됨
최소공배수: 수학적으로 (두 수의 곱) = (최대공약수)*(최소공배수) 임을 이용하거나,
여기서는 temp++;를 해가며 둘 중 하나에 곱해주고 이것을 다른 하나로 나누었을 때 나머지가 0이 되면 이 값을 최소공배수로 저장하고 break한 뒤 출력하도록 함
'solving > C, C++' 카테고리의 다른 글
[백준] 2525번 오븐 시계 (0) | 2022.08.31 |
---|---|
[백준] 1181번 단어 정렬 (O(nlogn) 정렬 알고리즘, strcmp) (0) | 2022.08.29 |
[백준] 2798번 블랙잭 (0) | 2022.08.29 |
[백준] 1157번 단어 공부 (0) | 2022.08.28 |
[백준] 10809번 알파벳 찾기 (ASCII 코드로 소-대문자, 소문자-숫자 변환) (0) | 2022.08.27 |