Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- 제로베이스
- 시급합니다
- 전화영어
- 최단경로문제
- Node.js
- 탄력근무
- Spring
- 프로젝트진행
- 원격근무
- 백엔드스쿨
- BFS
- JavaScript
- 자바스크립트
- maven
- 백엔드
- OpenAPI프로젝트
- 교육철학과 교육사
- OAuth
- 개발자
- 자료구조
- 백엔드공부
- array
- Queue
- YBM전화영어
- webServlet
- 내돈내산
- npm
- 탐색알고리즘
- 그래프탐색
- java
Archives
- Today
- Total
인생자취
두 분수를 더하는 방법 본문
분수를 더하는 가장 복잡한 방법은 코드를 짜서 분수를 더하는 것이다. :? 하지만, 단발성이 아닌 작업에서는 손으로 계산하는 수고가 훨씬 덜하겠지만, 반복적인 작업에서는 코드를 짜서 분수를 더하면 손으로 계산하는 수고는 줄어들게 된다. :>
두 분수를 더할 때의 로직을 생각해보면, 다음과 같은 로직으로 생각해야 할 것이다.
1. 두 분수의 분모들의 '최대공약수'를 구함
2. 통분
3. 분자의 덧셈
4. 기약분수를 구하기 위해 '최대공약수'를 구함
5. 답 반환
이때, 로직을 구현하기 위한 주요 아이디어는 최대공약수를 구하는 방법을 구현하는 것이다. 최대공약수는 유클리드 알고리즘을 활용해서 구하고, 유클리드 알고리즘은 재귀함수의 형태로 구현한다.
유클리드 알고리즘의 실행은 다음과 같다.
EUCLID(30, 21) = EUCLID(21, 9) // 30/21 = 1...9 중 나머지인 9가 EUCLID(a,b)의 b 자리에 오게됨.
= EUCLID(9, 3) // 21/9 = 2...3 중 나머지인 3이 b 자리에 오게됨.
= EUCLID(3, 0) // 9/3 = 3...0 이므로 b=0이므로 분모에 올 수 없으므로 a값을 반환.
= 3
위 내용을 재귀함수로 구현하면 다음과 같다.
int gcd(int a, int b) // 단, a, b는 음이 아닌 정수
{
if(a%b==0) return b;
else return gcd(b, a%b);
}
따라서 위 로직을 통해 구현하면 문제에 대한 코드 구현을 쉽게 할 수 있다.
요즘엔 검색만 하면 원하는 정보가 다 나오기에, 코드를 구현하는 것보다는 아이디어를 잘 떠올리는 게 굉장히 중요한 것 같다. 알고리즘 책을 잘 훑어보고, 앞으로 해결할 문제들의 아이디어에 기여할 수 있게끔 연습해봐야겠다.
참고문헌 : Introduction to Algorithms 3rd Edition, 31.2 최대공약수, p.958
'개발 > Dev | 코딩테스트' 카테고리의 다른 글
BOJ | Gold 4/11657/타임머신 (0) | 2023.07.14 |
---|---|
BOJ | Silver 1/1932/정수 삼각형 (0) | 2023.07.05 |
Programmers | Lv.2 / 주차 요금 계산 (0) | 2023.07.05 |
합해서 특정 값이 되는 경우 찾기 (0) | 2023.05.28 |
일치하는 문자열을 내림차순으로 정렬하기 (0) | 2023.05.28 |
Comments