Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 빅데이터
  • AI
  • 객체지향
  • 코딩테스트
  • TensorFlow
  • 프로그래밍
  • 객체
  • 코테
  • mysql
  • pytorch
  • 딥러닝
  • 선형대수학
  • MariaDB
  • 하둡
  • class
  • 프로그래머스
  • sql
  • 선형대수
  • Baekjoon
  • 알고리즘
  • 데이터
  • 자료구조
  • 파이썬
  • 머신러닝
  • 데이터사이언스
  • 데이터베이스
  • PYTHON
  • 파이썬기초
  • 백준
  • 인공지능

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

[python] 재귀 알고리즘 - 최대공약수 GCD - 유클리드 호제법
알고리즘

[python] 재귀 알고리즘 - 최대공약수 GCD - 유클리드 호제법

2024. 4. 27. 00:39
반응형

안녕하세요.

 

이번 포스팅은 재귀 알고리즘에 대해서 다뤄보았습니다.

 

재귀는 다양한 알고리즘에서 활용이 되는데요. 특히, 재귀를 모르고 지나친다면 다른 재귀에 기반하여 풀 수 있는 고등 알고리즘에 대해 알 수 없게 된다는 점이 있습니다. 

 

재귀로 쉽게 풀 수 있는 대표적인 알고리즘 중 하나인 최대공약수 찾는 알고리즘에 대해서 다뤄보겠습니다.

 

예를 들어 9 x 24 인 직사각형이 있다고 가정하겠습니다.

 

쉽게 범용적으로 풀 수 있는 방법 중 하나는 다음처럼 정사각형으로 분할이 될 때까지 쪼개는 방법이 있는데요.

 

로직 자체는 간다합니다.

  • 위 첫번째 그림처럼 9 x 24 크기의 직사각형에서 짧은 변의 길이인 9를 한 변으로 하는 정사각형으로 나눠줍니다. 그러면 2개의 9x9 정사각형이 만들어지고 하나의 9 x 6 크기의 직사각형이 남습니다.
  • 마찬가지로 9 x 6 크기의 직사각형에 대해서 다시 짧은 변으로 나눠주어 정사각형을 만들면 3 x 6 크기의 직사각형이 남습니다.
  • 이 때 3 x 6 크기의 직사각형은 3 x 3 정사각형 두개로 나뉘어집니다.
  • 이렇게 얻은 정사각형 변의 길이 3이 9와 24의 최대 공약수입니다.

위 연산은 python에서 mod 연산자를 활용하면 쉽게 로직을 만들 수 있습니다.

def gcd(x: int, y: int) -> int:
    if y == 0:
        return x
    else:
        return gcd(y, x % y)

 

여기서 재귀라는 속성 때문에 헷갈릴 수 있는 부분 중 하나는 "x와 y 중 어디에 더 짧은 변의 길이 값을 넣어줘야하는가?" 일 수도 있는데요.

위 코드와 동일하게 modulo 연산을 사용하면 그럴 걱정이 없습니다. 

gcd(y, x % y) 의 연산 방식이 결국에는 짧은 변을 기초로 하게 되어 있기 때문입니다.

 

간단하게 호출 순서를 살펴보면서 알아보겠습니다.

 

위에 명시한 코드 내 로직 흐름대로 따라가면 위 순서에 대한 이해가 되실겁니다.

반응형
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

투 포인터 (two pointer) 알고리즘이란?  (1) 2024.04.02
[leetcode 42] Trapping Rain Water - hard  (0) 2024.04.01
[백준 19532] 수학은 비대면 강의입니다 / Cramer's Rule / 브루트 포스  (1) 2024.03.26
[백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬  (0) 2024.03.24
[python] 등차수열과 등차수열의 합  (0) 2024.03.24
    '알고리즘' 카테고리의 다른 글
    • 투 포인터 (two pointer) 알고리즘이란?
    • [leetcode 42] Trapping Rain Water - hard
    • [백준 19532] 수학은 비대면 강의입니다 / Cramer's Rule / 브루트 포스
    • [백준 24313] 점근적 표기 1 문제 풀이 & 해설 - 파이썬
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바