자료구조와 알고리즘(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 빼줍니다.