[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); }