[C++] BOJ #2168 타일 위의 대각선
Posted on 2022. 01. 26
문제
한 변의 길이가 1cm인 정사각형 모양의 타일이 있다. 이 타일들을 가로가 xcm, 세로가 ycm인 직사각형 모양의 벽에 빈틈없이 붙였다. x와 y는 정수이다.
이 직사각형에 하나의 대각선을 그렸다. 직사각형에 붙어 있는 x*y
개의 타일 중에는 대각선이 그려진 타일도 있고, 그렇지 않은 타일도 있다. x*y
개의 타일 중에서 대각선이 그려져 있는 타일의 개수를 구하는 프로그램을 작성하시오.
입력
- 첫째 줄에 가로의 길이 xcm와 세로의 길이 ycm가 주어진다. x와 y는 1,000,000,000 이하의 자연수이다. x와 y사이에는 빈칸이 하나 이상 있다.
출력
- 첫째 줄에 대각선이 그려져 있는 타일의 개수를 출력한다.
해결방법 및 소스코드
- C++의
numeric
헤더에 포함된gcd
함수를 통해 최대공약수를 구해서 활용했다. - 구하려는 답의 공식은
x + y - (x와 y의 최대공약수)
이다.
#include <iostream>
#include <numeric>
using namespace std;
int main()
{
int x, y;
cin >> x >> y;
cout << x + y - gcd(x, y);
}