
오늘은 스택에 대해 공부해보자! 스택(Stack) 자료구조는 한쪽 끝이 막힌 형태이다. 스택의 가장 큰 특징은 입구가 하나뿐이기 때문에 먼저 들어간 것이 가장 나중에 나오는 구조이다. 이를 선입후출(First In Last Out, FILO)이라고 하거나 반대로 후입선출(Last In First Out, LIFO)이라고 한다. 스택은 한쪽만 뚫려 있는 구조이기 때문에 삽입과 추출이 한쪽에서만 진행된다. 스택에 데이터를 삽입하는 동작을 push(푸시)라고 하며, 반대로 데이터를 추출하는 동작을 pop(팝)이라고 한다. 스택에서는 top이라는 용어가 중요한데, 현재 스택에 들어있는 가장 위의 데이터 위치를 가리키는 개념이다. 스택은 배열 형태로 구현할 수 있다. 스택이 작동하는 코드를 구현해 보자. # 함수..

오늘은 선형 리스트와 비슷한듯 다른 단순 연결 리스트에 대해 알아보자! 앞서 공부했던 선형 리스트는 배열에 데이터를 차례대로 저장하므로 데이터의 실제 위치 순서로 구성된다. 한마디로 물리적인 순서와 논리적인 순서의 구조가 동일하다. 반면 단순 연결 리스트(Singly Linked List) 에서는 노드들의 위치가 모두 떨어져 있고, 노드의 주소도 순차적이지 않다. 하지만 연결된 링크(Link)를 따라가다 보면 순서대로 정렬할 수 있다. 선형 리스트와 단순 연결 리스트를 좀 더 자세히 비교해 보자. 선형 리스트에서는 데이터의 삽입하거나 삭제할 때에 많은 작업이 필요하다. 중간에 삽입하게 되면 중간부터 끝까지의 데이터가 모두 한칸씩 뒤로 이동해야 한다. 삭제할 때에도 한칸씩 앞으로 당여져야 한다. 이렇게 될..

오늘은 선형 리스트에 대해 공부해 보려고 한다. 프로그래밍을 하며 기초가 되는 부분들인 만큼 열심히 공부해 보자! 선형 리스트(Linear List) 란? : 데이터를 일정한 순서로 나열한 자료구조로, 순차 리스트(Ordered List)라고도 한다. 선형 리스트는 입력 순서대로 저장하는 데이터에 적당하다. 선형 리스트는 다양한 방법으로 구현할 수 있지만 가장 기본적인 방법은 배열을 이용하는 것이다. 사실 선형 리스트를 구현해 놓을 걸 봤는데 굳이 이렇게까지 해야 하나 싶은 코드지만, 그래도 알고리즘의 과정을 이해하는 데 초점을 둔다는 생각으로 작성해 보았다. # 함수 선언 def add_data(friend): katok.append(None) kLen = len(katok) katok[kLen-1] ..

오늘은 로또 생성기에 이은 별 ★★★ 난이도의 가장 많이 나온 글자 세기 문제를 풀어보겠다. 예제 설명 : 김소월의 진달래꽃 시에서 4회 이상 나온 글자를 센다. 단, 영문/한글만 해당하고, 그 외는 인정하지 않는다. poet = ''' 나 보기가 역겨워 가실 때에는 말없이 고이 보내 드리오리다 영변에 약산 진달래꽃 아름따라 가실 길에 뿌리오리다 가시는 걸음 걸음 놓인 그 꽃을 사뿐히 즈려 밟고 가시옵소서 나 보기가 역겨워 가실 때에는 죽어도 아니 눈물 흘리오리다 ''' poet = ''.join(poet.split()) # 모든 공백, 줄바꿈 등 제거 word = {} for i in poet: if i in word: word[i] += 1 else: word[i] = 1 for key in word..

오늘 끄적여볼 문제는 자동 로또 번호 생성기 입니다. 난이도도 낮은 문제이니 가볍게 풀어봅시다. 로또도 확률 싸움인 만큼 이렇게 난수 발생시켜서 결과를 확인한다면 언젠간 맞을지도..? 예제 설명 : 1~45 숫자 중에서 6개를 고르는 로또 번호를 자동으로 만들어 주는 프로그램을 작성하자. 사용자가 입력한 개수만큼 번호 쌍을 생성해 주는 기능을 한다. import random result = [] print('** 로또 번호 자동 생성을 시작합니다. **') count = int(input('몇 번을 뽑을까요?')) for _ in range(count): result = [] while(True): number = random.randrange(1,45) if number in result: contin..