Skip to content

Commit 72bc3ec

Browse files
committed
docs: 유클리드 알고리즘 문서 업데이트
1 parent ba338cd commit 72bc3ec

File tree

1 file changed

+58
-15
lines changed

1 file changed

+58
-15
lines changed

_posts/2024-03-04-euclidean-algorithm.md

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: Euclidean Algorithm
3-
description: 유클리드 알고리즘에 대해 설명하는 페이지입니다.
2+
title: 유클리드 (Euclidean) Algorithm
3+
description: 유클리드 (Euclidean) 알고리즘에 대해 정리한 페이지입니다.
44
date: 2024-03-04 00:00:00 +/-TTTT
55
categories: [Algorithms]
66
tags: [algorithm]
@@ -15,18 +15,21 @@ comments: true
1515
<blockquote class="prompt-info"><p><strong><u>Tags</u></strong> <br />
1616
Algorithm</p></blockquote>
1717

18-
## Introduction
18+
## 개요
1919

20-
- **Definition**
21-
- **유클리드 알고리즘(Euclidean Algorithm))** 은 두 수의 최대공약수를 구하는데 사용되는 방법입니다.
22-
- 유클리드 알고리즘은 두 수 a, b(a > b)의 공약수의 집합은 (a - b)와 b의 공약수 집합과 같다는 점을 이용합니다. 즉, a, b의 최대공약수 gcd(a, b)는 항상 (a - b)와 b의 최대공약수 gcd(a - b, b)와 같습니다.
20+
`유클리드(Euclidean)` 알고리즘에 대해 정리한 페이지입니다.
2321

24-
## How to Use
22+
## 유클리드 (Euclidean) 알고리즘
2523

26-
### 최대공약수 (Greatest Common Divisor, GCD)
24+
### 개념
25+
26+
`유클리드(Euclidean)` 알고리즘은 두 수의 `최대공약수(Greatest Common Divisor, GCD)`를 구하는데 사용되는 알고리즘입니다. 유클리드 알고리즘은 두 자연수 `a`, `b`(`a > b`)에 대해 `a``b`의 최대공약수는 `b``a % b`의 최대공약수과 같다는 점을 이용합니다. 즉, `GCD(a, b)= GCD(b, a % b)`라는 식이 성립하며, 나머지 `b`가 0이 될 때까지 반복하여 최대공약수를 구하게 됩니다.
27+
28+
### 구현
29+
30+
#### 최대공약수 (Greatest Commmon Divisor, GCD)
2731

2832
```java
29-
// Java
3033
int gcd(int a, int b) {
3134
if (b == 0) {
3235
return a;
@@ -37,7 +40,6 @@ int gcd(int a, int b) {
3740
```
3841

3942
```kotlin
40-
// Kotlin
4143
fun gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
4244
```
4345

@@ -53,9 +55,14 @@ const gcd = (a, b) => {
5355
return gcd(b, a % b);
5456
}
5557
};
58+
59+
const a = 21;
60+
const b = 15;
61+
62+
console.log(gcd(Math.max(a, b), Math.min(a, b))); // 3
5663
```
5764

58-
### 최소공배수 (Least Common Multiple, LCM)
65+
#### 최소공배수 (Least Common Multiple, LCM)
5966

6067
```javascript
6168
/**
@@ -74,10 +81,46 @@ const a = 21;
7481
const b = 15;
7582

7683
const lcm = (a * b) / gcd(Math.max(a, b), Math.min(a, b));
84+
console.log(lcm); // 105
7785
```
7886

79-
## Examples
87+
## Example
88+
89+
- <a href="https://www.acmicpc.net/problem/9613" target="_blank">9613번: GCD 합</a>
90+
91+
```javascript
92+
const path =
93+
process.platform === "linux" ? "/dev/stdin" : "./algorithm/input.txt";
94+
const input = require("fs").readFileSync(path).toString().split("\n");
95+
const t = Number(input[0]); // 테스트 케이스의 수, 1 <= t <= 100
96+
97+
/**
98+
* @param {number} a
99+
* @param {number} b
100+
*/
101+
const gcd = (a, b) => {
102+
if (b === 0) {
103+
return a;
104+
} else {
105+
return gcd(b, a % b);
106+
}
107+
};
108+
109+
for (let i = 1; i <= t; i++) {
110+
const temp = input[i].split(" ").map(Number);
111+
const [n, arr] = [temp[0], temp.slice(1)];
112+
let result = 0;
113+
114+
for (let j = 0; j < n; j++) {
115+
for (let k = j + 1; k < n; k++) {
116+
result += gcd(arr[j], arr[k]);
117+
}
118+
}
119+
120+
console.log(result);
121+
}
122+
```
123+
124+
## 참고 자료
80125

81-
- <a href="https://github.com/HyunJinNo/Algorithm/blob/main/Number%20Theory/Euclidean%20Algorithm/POTION.java" target="_blank">POTION</a>
82-
- <a href="https://github.com/HyunJinNo/Algorithm/blob/main/%EB%B0%B1%EC%A4%80/Bronze%20I/2609.%E2%80%85%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98%EC%99%80%E2%80%85%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98/%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98%EC%99%80%E2%80%85%EC%B5%9C%EC%86%8C%EA%B3%B5%EB%B0%B0%EC%88%98.kt" target="_blank">2609. 최대공약수와 최소공배수</a>
83-
- <a href="https://www.acmicpc.net/problem/5347" target="_blank">5347번: LCM</a>
126+
- <a href="https://namu.wiki/w/유클리드%20호제법" target="_blank">유클리드 호제법 - 나무위키</a>

0 commit comments

Comments
 (0)