본문 바로가기
컴퓨터과학/알고리즘

알고리즘을 내 것으로 만드는 법

by syk25 2026. 2. 26.
반응형

오늘 버블소트 문제를 풀어봤다.

코드 자체는 익숙했지만 왜 그렇게 논리가 구성되었는지는 고민을 해본 적이 없었다. 또 다른 정렬 문제가 나왔을 때 버블소트로 풀려고 한다면 코드의 논리를 이해해야한다고 생각했다. 따라서 버블소트의 코드를 보면서 이해하는 과정을 적어봤다. 다른 알고리즘도 비슷하게 공부할 수 있겠다는 생각이 들었기 때문이다.

 

알고리즘은 다음의 방법으로 분해해봤다.

  1. 코드 훑어보기
  2. 알고리즘의 목적 파악하기
  3. 알고리즘 적용시 구체적인 결과 파악하기
  4. 알고리즘이 해결하는 문제를 작은 문제로 쪼개기
  5. 각각의 문제를 코드로 옮겨 보기
  6. 내코드와 알고리즘 코드 비교

 

버블 소트를 예로 들어보자.

 

1. 코드 훑어보기: 코드 전체의 구조를 눈에 익힌다.

def bubble_sort(nums):

    swapping = True
    end = len(nums)
    
    while swapping:
        swapping = False
        for i in range(1, end):
            if nums[i-1] > nums[i]:
                nums[i-1], nums[i] = nums[i], nums[i-1]
                swapping = True
        end -= 1

    return nums

 

2. 목적파악: 버블 소트의 목적은 리스트 내의 데이터의 정렬이다.

3. 예상 결과 파악: 리스트 내의 데이터는 리스트의 오른쪽을 갈수록 커진다

4. 문제 쪼개기: 알고리즘에 따라 문제가 결정된다. 핵심은 작은 문제에서 큰문제 방향으로 정의하는 것이다.

더보기

문제 쪼개기 예시

  • 딱 달라붙어 있는 데이터 둘을 볼 때, 큰 것이 오른쪽으로 와야한다.
  • 가장 큰 데이터는 리스트의 가장 오른 쪽에 있어야한다
  • 리스트의 데이터는 왼쪽에서 오른쪽으로 갈때 점점 커져야한다.

5.  코드 작성 연습하기: 쪼개진 문제를 가지고 코드로 옮겨본다

6. 내코드와 알고리즘 코드 비교

 

코드 작성 팁

  • 결국 코드는 하나의 단순한 레시피부터 여러개의 레시피의 조합으로 이뤄진 것 같다.
  • 알고리즘은 레시피랑 비슷한 것 같다. 레시피에 필요한 재료들을 먼저 준비한 후, 순서에 따라서 조리를 한다. 조리가 끝나면 요리가 준비된다. 알고리즘도 같다. 문제를 풀기 위한 데이터(재료)를 먼저 적는다. 그다음 문제 풀이를 작성한다. 그리고 결과를 반환한다.

 

인사이트

  • 알고리즘을 이해하려면 일단 해결하려는 문제부터 파악하자. 그리고 그문제를 파악하기 위해 가장 작은 문제부터 찾아서 이해한 후에 문제의 범위를 넓혀 나가자.
  • 알고리즘을 내것으로 만드려면 각 단계가 필요한 이유를 설명할 수 있어야한다.
  • 방도 정리하면 보기가 좋은 것처럼 코드들도 모아서 정리하는 것이 좋다. 준비물 데이터는 앞단에, 레시피와 같은 알고리즘은 가운데에, 요리인 결과물은 끝에 배치하자.
  • 코드는 하나의 레시피일 수도 있고 여러개의 레시피가 모인 것일 수도 있다.
반응형