본문 바로가기

전체 글133

알고리즘 - 재귀 알고리즘(2) 재귀 알고리즘 중 대표적인 하노이 탑을 보겠습니다. 일단 3개의 원반을 1번 기둥에서 3번 기둥으로 옮긴다고 했을 때 순서는 1번 원반을 1기둥에서 3기둥으로 2번 원반을 1기둥에서 2기둥으로 1번 원반을 3기둥에서 2기둥으로 3번 원반을 1기둥에서 3기둥으로 1번 원반을 2기둥에서 1기둥으로 2번 원반을 2기둥에서 3기둥으로 1번 원반을 1기둥에서 3기둥으로 이렇게 총 7번 옮깁니다. 이걸 크게 3개로 묶어서 생각하면 1,2번 원반을 1기둥에서 2기둥으로 3번 원반을 1기둥에서 3기둥으로 1,2번 원반을 3기둥으로 옮기는 것으로 생각할 수 있습니다. 아래는 위 생각을 코드로 만든 것입니다. def move(no, x, y): if no > 1: move(no - 1, x, 6 - x - y) print.. 2020. 11. 18.
알고리즘 - 재귀 알고리즘(1) 재귀는 어떠한 작업을 할 때, 자기 자신을 포함 및 사용하는 경우를 말합니다. 재귀를 사용하는 대표적인 예인 팩토리얼 문제를 보겠습니다. def factorial(n: int): if n > 0: return n * factorial(n-1) else: return 1 if __name__ == '__main__': n = int(input('출력할 팩토리얼 값을 입력: ')) print(f'{n}의 팩토리얼은 {factorial(n)}입니다.') 만약 3의 팩토리얼 값을 구한다고 했을 때 factorial(3)을 호출하면 3 * factorial(2)을 반환하고 factorial(2)는 다시 factorial(1)을, factorial(0)일 때는 1을 반환하게 됩니다. 그럼 factorial(1) -.. 2020. 11. 16.
백준 - 5430번 문제 https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 코드 import sys def result(p, lst): l, r = 0, len(lst) reverse = False if r < p.count('D'): return 'error' for i in p: if i == 'R': reverse = not reverse elif i == 'D': if reverse: r -= 1 else: l += 1 if len(lst) == 0: return '[]' else: lst = lst[l:r] if.. 2020. 11. 13.
알고리즘 - 큐(queue) 큐는 스택과 같이 데이터를 임시 저장하는 자료구조입니다. 스택과 다른점은 스택은 마지막에 넣은 데이터가 먼저 나오지만 큐는 먼저 넣은 데이터가 먼저 나옵니다. 큐에 데이터를 추가하는 작업은 enqueue, 데이터를 꺼내는 작업은 dequeue라고 합니다. 또한 맨 앞의 원소를 front, 맨 끝의 원소를 rear라고 합니다. 위 큐에서 115를 빼면 나머지 위 숫자들은 한칸씩 앞으로 당겨져야 합니다. 그렇게 되면 시간 복잡도 O(n)이 되고 데이터를 꺼낼 때마다 이렇게 처리하면 효율성이 떨어지게 됩니다. 이럴 때 사용하는 자료구조가 ring buffer입니다. 왼쪽이 링버퍼고 오른쪽은 링 버퍼를 펼쳐 놓은 상태입니다. 6번 인덱스가 맨 앞이고, 2번 인덱스가 맨 뒤인 상태입니다. 링버퍼에 24가 추가되면.. 2020. 11. 12.