목표 스택을 활용해서 중위 표기법으로 입력한 연산을 후위 표기법으로 변환해서 결과를 출력하는 프로그램을 작성해보겠습니다. 목차 클릭하면 해당 목차로 이동합니다. 수식 표기법 스택 예제 : 중위 표기법을 후위 표기법으로 변환하여 계산하는 계산기 정리 개요 저번 포스팅에서 스택에 대해서 복습했습니다. 스택은 LIFO(Last In First Out) 구조를 갖는 자료구조입니다. 마치 접시와 같이 마지막에 들어간 데이터가 맨 처음 나오는 구조로, 파이썬의 클래스를 활용해서 구현했습니다. 클래스 안에 멤버 리스트를 생성해서 append, pop 함수로 스택을 만들었습니다. 이번 포스팅에서는 스택을 활용해서 중위 표기(infix)로 입력된 수식을 후위 표기(postfix)로 바꾸고 계산하는 프로그램을 작성해보도록..
목표 저번 포스팅에서 간단히 알아봤던 스택(Stack)에 대해서 복습하고 실습을 통해 자세히 이해하도록 하겠습니다. 목차 클릭하면 해당 목차로 이동합니다. 스택(Stack) 이란? 연습 문제: 괄호 맞추기 정리 개요 저번 포스팅에서 순차적 자료구조(Sequential Data Structure)에 대해서 알아보았습니다. 참고 - [자료구조] 순차적 자료구조, 배열과 리스트의 이해 그 중에서도 배열과 리스트에 대해서 자세히 알아보았는데요. 이 과정에서 스택, 큐, 디큐에 대해서 잠깐 언급했었습니다. 이번 포스팅에서는 스택에 대해서 자세히 알아보도록 하겠습니다. 스택(Stack)이란? 어떤 자료구조든 삽입·삭제·탐색 기능을 제공합니다. 스택에서는 Push(삽입), Pop(삭제)를 비롯한 Top(맨 위에 있는..
목표 대표적인 순차적 자료구조인 배열과 리스트에 대해서 자세히 알아보도록 하겠습니다. 목차 클릭하면 해당 목차로 이동합니다. 순차적 자료구조(Sequential Data Structure) C언어: 배열(Array) Pythoon: 리스트(List) 정리 개요 이전 포스팅에서 시간 복잡도와 BIG-O 표기법에 대해서 알아보았습니다. 이번 포스팅에서는 순차적 자료구조인 배열과 리스트에 대해서 알아보도록 하겠습니다. 배열과 리스트는 C언어나 파이썬을 이용해서 코딩을 할 때 자주 사용하는 자료구조입니다. 저도 학교에서 과제나 프로젝트를 진행할 때 많이 사용한 자료구조인데요. 특히, 리스트의 경우 많은 연산자가 있어서 유용하게 사용했습니다. 어떤 특징이 있는지 자세히 이해하고 쓰면 더 효율적으로 사용할 수 있을..
목표 피보나치 수열의 시간 복잡도(Time Complexity)에 대해서 이해해보도록 하겠습니다. 목차 클릭하면 해당 목차로 이동합니다. 피보나치(Fibonacci) 수열이란? 피보나치 수열을 구하는 알고리즘 피보나치 수열 개선하기 피보나치 수열 알고리즘을 통한 시간 복잡도 심화 정리 개요 앞선 포스팅에서 시간 복잡도와 BIG-O 표기법에 대해서 배웠습니다. 이번에는 피보나치 수열의 시간 복잡도를 BIG-O 표기법으로 나타내 보겠습니다. 이를 통해, 어떤 특징이 있는지 알아보겠습니다. 피보나치(Fibonacci) 수열이란? 우선, 피보나치 수열이란 첫째 항, 둘째 항이 1이고 그 뒤의 항은 바로 앞의 두 항의 합인 수열을 뜻합니다. 말로 하면 조금 복잡해보이는데요. 직접 예시를 확인해보겠습니다. F(n)..
문제 왕이 마실 와인 8병 중 하나에 강력한 독이 들어 있다. 한 방울만이라도 치명적이다. 정상 와인을 아무리 섞어도 치명적이다. 다행히 검사장비를 구할 수 있다. 단, 검사는 1시간이 필요하다. 왕은 무조건 1시간 후에 와인을 마실테니 독이 든 병을 찾아내라는 명령을 내렸다. 이를 위해, 몇 대의 검사 장비가 있으면 충분할까? (한 번 검사할 때에는 여러 병의 와인을 섞어 검사가 가능하다.) 풀이 와인 8병을 검사하는데 최소한의 검사 장비로 해결해야하는 문제입니다. 8병의 와인이지만 사실 7병만 검사하면 충분합니다. (모두 독이 안들어있으면 검사안한 병에 독이 있으니까요.) 최대 7대의 검사 장비가 있으면 편하지만, 최소한의 검사 장비로 하는 것이 중요하기 때문에 다음과 같이 생각했습니다. 와인을 일자..
목표 알고리즘 성능평가를 위한 시간 복잡도를 나타내는 BIG-O 표기법에 대해서 이해하도록 하겠습니다. 목차 클릭하면 해당 목차로 이동합니다. 시간 복잡도의 활용 BIG-O 표기법이란? 정리 개요 3번의 게시글에 걸쳐서 가상 컴퓨터, 시간 복잡도, BIG-O 표기법에 대해서 배우는 이유는 "알고리즘의 성능 평가" 때문입니다. 지금까지 알고리즘의 성능 평가를 하기 위한 환경, 방법에 대해서 배웠습니다. 이번 시간에는 알고리즘의 성능을 증가율 측면에서 바라보는 BIG-O 표기법에 대해서 배워보도록 하겠습니다. 시간 복잡도의 활용 BIG-O 표기법에 이해하기 전에 시간 복잡도를 활용해서 알고리즘의 성능 평가를 어떻게 하는지 알아야 합니다. 저희는 이전 게시글을 통해서 알고리즘을 보고 알고리즘의 수행시간 즉, ..
목표 예시를 통해서 시간 복잡도에 대한 개념을 이해하도록 하겠습니다. 목차 클릭하면 해당 목차로 이동합니다. 예시로 이해하는 시간 복잡도 다양한 함수로 완벽하게 이해하기 정리 개요 저번 포스팅에서 알고리즘의 성능 평가를 위해서 시간 복잡도(Time Complexity)라는 개념을 이용한다고 했습니다. 사람들마다 H/W, S/W 환경이 다르기 때문에 가상 컴퓨터(Virtual Machine)에서 가상 언어로 이루어진 가상 코드를 사용해서 알고리즘의 성능을 평가합니다. 포스팅 마지막에 가상 코드의 예시를 확인하면서 마무리했는데요. 이번 포스팅에서는 마지막에 확인한 코드를 보면서 시간 복잡도를 이해하는 시간을 갖겠습니다. 예시로 이해하는 시간 복잡도 알고리즘의 성능 평가는 알고리즘의 수행 시간을 비교해서 진행..
목표 시간 복잡도를 측정하기 위한 가상 컴퓨터(Virtual Machine)의 개념에 대해서 이해한다. 목차 클릭하면 해당 목차로 이동합니다. 1. 가상 컴퓨터 2. 가상 언어 3. 가상 코드 4. 정리 개요 가상 컴퓨터, 가상 언어, 가상 코드에 대한 개념은 자료구조와 알고리즘의 성능 평가를 위해서 필요합니다. 성능 평가는 알고리즘을 실행하는지 얼마나 걸리는지 수행시간을 측정하는 것입니다. 이 수행시간을 각자의 컴퓨터에서 코드(C, Java ..)로 수행 시간을 측정할 수도 있지만, 개개인의 H/W 성능이 제 각각이고, S/W 경이 모두 다르기 때문에 정확한 성능을 알 수 없습니다. 그렇기 때문에, 자료구조와 알고리즘의 성능 평가는 가상 컴퓨터 위에서 가상 언어를 이용한 가상 코드를 이용해서 진행됩니다..