반응형

문제 출처 :


https://www.acmicpc.net/problem/2168



알고리즘 분석 :


문제 해결에 필요한 사항

1. 수학


이 문제는 타일 위에 대각선을 그엇을 때, 몇개의 타일을 지나냐인데 예제 입력에서 가로 8 세로 12라고 생각했을 때


기울기가 3/2임을 알 수 있다. 이때 2의 배수마다 타일의 꼭지점을 지나게 된다.


결국 세로 12가 될 때까지 2의 배수를 이용하면 0, 3, 6, 12가 된다.


이때 규칙을 찾아보면 알 수 있는 것은 8과 12의 최대 공약수가 4가 된다는 것임을 알 수 있고


결국 x + y - gcd(x,y)이 정답이 된다. 즉, 예제의 답은 8 + 12 - 4인 16이 답이 된다.















소스 코드 : 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdio>
#include <cmath>
 
using namespace std;
 
int gcd(int a, int b) { return !b ? a : gcd(b, a%b); }
 
int main()
{
    int x, y;
    scanf("%d %d"&x, &y);
 
    int m = gcd(x, y);
 
    int ans = x + y - m;
 
    cout << ans;
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[7569번] 토마토  (0) 2017.08.12
[1152번] 단어의 개수  (0) 2017.08.12
[8980번] 택배  (0) 2017.08.09
[2011번] 암호코드  (2) 2017.08.08
[14653번] 너의이름은  (0) 2017.08.07