자료구조와 알고리즘(C++)
[자료구조와 알고리즘] C++ (최소공배수와최대공약수 구하기, 별 X자 찍기)
susot
2025. 3. 19. 15:13
최소공배수

문제 분석) 입력으로 a와 b과 주어지고, 두 수의 최소공배수를 계산해서 출력하는 문제입니다.
코드
#include <iostream>
using namespace std;
int main() {
int a,b;
int c,d;
cin >> a >> b;
c = a;
d = b;
while(c != d)
{
if(c > d)
{
d += b;
}
else
{
c += a;
}
}
cout << c;
return 0;
}
해설) a,b를 입력받고 c, d에다가 a, b를 각각 할당해 준 뒤 c, d가 같아질 때까지 a, b를 계속 더해주면
둘이 같아졌을때가 최소 공배수입니다.
최대공약수

문제 분석) 입력으로 a와 b과 주어지고, 두 수의 최대공약수를 계산해서 출력하는 문제입니다.
코드
#include <iostream>
using namespace std;
int main() {
int a,b;
int answer = 0;
cin >> a >> b;
int min = a > b ? b : a;
for(int i = 1; i <= min; i++)
{
if(a % i == 0 && b % i == 0)
{
answer = i;
}
}
cout << answer;
return 0;
}
해설) a,b를 입력받고 a, b 중에 더 작은 수를 min에 저장합니다. 최대공약수는 아무리 커도 min과 같기 때문에 1부터 min까지 a와 b 둘 다 나눴을 때 나머지가 0인 수를 answer에 저장하면서 for문이 끝나면 answer가 최소공배수이기 때문에 answer를 출력하면 됩니다.
별 X자 찍기

문제 분석) 자연수 n이 주어지면 n번줄 만큼 X자로 별을 출력하는 문제입니다.
코드
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int star1 = 1, star2 = n;
for (int i = 0; i < n; i++)
{
for (int j = 1; j <= n; j++)
{
if (j == star1 || j == star2)
{
cout << "*";
}
else cout << " ";
}
cout << endl;
star1++;
star2--;
}
}
해설) n을 입력받고 star1과 star2변수를 만들고 각각 1과 n을 할당해 줍니다.
이중 for문을 돌면서 j가 star1이나 star2와 같으면 별을 출력, 아니면 띄어쓰기를 합니다.
내부 for문이 끝나면 star1은 1 증가시키고, star2는 1 빼줍니다.

