본문 바로가기

Python_programming/알고리즘

(5)
파이썬 알고리즘 기초 - 스택(Stack) 이번 시간에는 '스택'에 대해서 다뤄 보겠습니다. 이게 스택입니다. 말 그대로 '스택' 그 이상도 그 이하도 아니네요. 자, 저 책 하나하나를 데이터로 생각해볼게요. 일반적으로 생각해볼 때, 책을 어떻게 안정적으로 꺼낼 수 있을까요? 예를 들어, 위에서 10번째에 위치한 책(=데이터)를 꺼내고 싶은데 그 위까지 책을 한 팔로 살 짝 들어서 옆으로 싹 뺀다면, 안 무너뜨릴 자신 있으신가요? ㅎㅎ 위에서부터 9권을 내리고 10번째 책을 빼는게 안정적이겠죠? 스택 이라는 자료구조가 그렇습니다. 저 스택을 쌓을 때 위에 있을수록 더 늦게 쌓은 책이잖아요? 나중에 입력한 데이터를 먼저 빼는(LIFO) 데이터 구조가 스택입니다! 저는 스택이라는 데이터 구조를 생각할 때, 저렇게 위태위태하게 쌓은 이미지를 상상합니다..
파이썬 알고리즘 기초 - 큐(Queue) 이번 시간에는 '큐' 라고 하는 데이터 구조를 다뤄 보겠습니다. 그림으로 먼저 보겠습니다. 직사각형 타일이 데이터라고 생각하시면 됩니다. '큐'를 표현하는 그림들은 많이 있습니다. 데이터를 하나하나 넣었습니다. 앞으로 여러 데이터 구조를 살펴볼 것입니다. 각 구조마다 핵심적인 특성을 말하는 약어가 있습니다. 핵심은 FIFO(First In First Out) 입니다. LILO(Last-In, Last-Out) 랑 같은 의미입니다. 보통 FIFO 로 많이 얘기합니다. 위 그림을 보면 31이라는 데이터가 제일 먼저 들어갔고 제일 우측에 있습니다. 입구는 insert 출구는 delete로 위 그림에는 나와 있는데요. 6개의 데이터를 넣었는데 제일 먼저 들어간 31이 제일 먼저 나오는 특성을 갖고 있는 것이 '..
파이썬 알고리즘 기초 - 하노이의 탑 (재귀 알고리즘) 하노이의 탑(Tower of Hanoi)은 퍼즐의 일종이다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있다. 게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다. 한 번에 하나의 원판만 옮길 수 있다. 큰 원판이 작은 원판 위에 있어서는 안 된다. 하노이의 탑의 원리(애니메이션) 하노이의 탑 문제는 재귀 호출을 이용하여 풀 수 있는 가장 유명한 예제 중의 하나이다. 그렇기 때문에 프로그래밍 수업에서 알고리즘 예제로 많이 사용한다. 일반적으로 원판이 n개 일 때, 2^n -1(=2의 n승 빼기 1)번의 이동으로 원판을 ..
파이썬 알고리즘 기초 - 이진 탐색(binary search) 이번 포스팅도 프로그래머스의 '어서와! 자료구조와 알고리즘은 처음이지?' 강의의 3강인 정렬과 탐색을 정리하는 내용입니다. 오늘은 이진 탐색에 대해 다뤄볼건데요. 그전에 메서드 몇 가지 알아보겠습니다. 1. 파이썬 정렬 메서드 2가지 1-1) sorted - 파이썬 내장 함수 , 정렬된 새로운 리스트를 얻어냄 sorted() 메서드를 이용하면 위 코드와 같이 정렬한 컬렉션 타입의 자료형을 리턴해줍니다. 1-2) sort() - 리스트의 메서드. 해당 리스트를 정렬한다. 리스트의 메서드인 .sort() 를 써도 됩니다. 이거의 경우 별도로 return 하지 않고 자체적으로 기존 리스트를 정렬한 뒤 그대로 반영합니다. +) 내장 함수와 메서드의 차이가 조금씩 감이 오시나요? reverse = True 위 인..
파이썬 알고리즘 기초 - 선형 배열 (feat. 시간 복잡도) 이번 시간부터 파이썬으로 프로그래밍 알고리즘을 다뤄보려고 합니다. 제가 워낙 약한 부분이라서 공부하면서 정리하고자 하니 첨언이나 조언 있으시면 언제든지 댓글 주시면 감사하겠습니다 :) 지금부터 쓰는 이 글을 프로그래머스에서 하는 '어서와! 자료구조와 알고리즘은 처음이지?' 강의를 듣고 문제를 풀면서 이에 대한 내용들을 정리를 위한 글입니다. 오늘은 선형 배열에 다뤄보려고 합니다. 1) Linked Array 선형 배열은 데이터들이 선 (line) 처럼 일렬로 늘어선 형태를 말합니다. 보통 프로그래밍에서 배열 (array) 이라고 하면 같은 종류의 데이터가 줄지어 늘어서 있는 것을 뜻하는데요, Python 에서는 서로 다른 종류의 데이터 또한 줄세울 수 있는 리스트 (list) 라는 데이터형이 있습니다. ..