본문 바로가기

ComputerScience/Algorithm concepts

(13)
[C언어/자료구조] Stack. 스택의 의미와 필수 함수, 응용 여러분 안녕하세요. 이번글에서는 Stack은 무엇인가? stack에 쓰이는 함수를 소개하겠습니다. (stack을 활용한 표기식 변환 방법 아래 링크 참고하세요) 2021.09.16 - [자료구조] - [자료구조] 중위표기식 후위표기식 변환 방법(stack의 응용) 1. Stack이란 무엇인가? (같은 자료형)데이터를 차곡 차곡 쌓아올린 형태를 Stack이라고 합니다. ex) 연탄 아궁이에 연탄을 넣는것과 꺼내는 방법과 같은 개념입니다. 연탄을 넣을 입구는 하나 이고, 가장 처음 넣은 연탄은 가장 마지막에 뺄 수 있습니다. 'top'으로 정한 곳에서만 삽입(push), 삭제(pop)가 가능합니다. 그렇게 정의되어있습니다!!!!!(특징입니다 stack의 특징) 위의 원리에 따라 삽입한 순서대로, 그..
[자료구조] 중위표기식과 후위표기식 간 변환방법 완벽하게 부수기 +_+ | stack의 응용 여러분 안녕하세요:) "C로 배우는 쉬운 자료구조" 책을 공부하며, 컴퓨터가 사용하는 연산 방법인 후위 표기법에 대해 공부한 개념, 방법에 알게된 개념들을 정리하려고 합니다. 1.  컴퓨터는 어떻게 산술처리를 할까요? 우리는 수식을 한번에 눈으로 훑은 후에, 무엇을 우선적으로 해야하는지 쉽게 알 수 있습니다. 근데 컴퓨터는 수식에서 연산자의 우선순위 파악을 어려워합니다. 또한 순차적으로 처리하기 때문에, 컴퓨터는 괄호, 연산자의 우선순위를 따로 처리하지 않습니다. 그 대신, 왼쪽에서 오른쪽으로 표기된 순서대로 처리를 하면 결과가 올바르게 나오는 후위 표기법을 사용합니다. 중위 표기법 : 연산자를 피연산자의 가운데에 표기하는 방법입니다. 우리가 일반적으로 사용하는 일반적인 식입니다. 원래 연산자는 반드..
[C언어] 연결리스트(linkedList)와 원형 연결리스트! _C로배우는 쉬운 자료구조 C로 배우는 쉬운 자료구조를 참고했습니다. 안녕하세요!! (순차 자료구조와 연결 자료구조의 차이점을 알고 싶다면?) (아래 링크 참고해주세요!!) 2021.08.28 - [자료구조] - [C언어] 2차원, 3차원 배열을 통한 순차 자료구조의 사용 예시(테트리스 블록, 휴대폰 판매량, 선형 list) 삽입, 삭제 연산 이후 '연속적' 성질을 유지하기 위해 데이터의 추가 이동을 해주어야 하는 순차 자료와 달리!! 연결 자료구조란? '동적할당' 필요한 갯수만큼의 (데이터) 노드를 각각 동적 할당 후, 해당 데이터들을 이어주는 방식입니다. 다시 말해서 데이터와 데이터가 연결되어 구현되는 방식이라서, 메모리 사용의 비효율성 문제가 없습니다. 줄줄이 소시지, 또는 화물칸을 실은 기차를 연상할 수 있습니다. 어라? ..
[C언어] 2차원, 3차원 배열을 통한 순차 자료구조의 사용 예시(테트리스 블록, 휴대폰 판매량, 선형 list) 순차 자료구조란? 데이터는 다양한 방식으로 저장될 수 있는데, 메모리에 저장된 물리적 위치가 연속적으로 저장된 경우를 순차 자료구조라고 합니다. C에서는 배열을 통해서 순차 자료구조를 표현합니다. 그래서 메모리에 저장된 시작 위치를 알면 특정 자료의 위치를 쉽게 알 수 있다는 장점이 있습니다. 반면에 자료들이 연속적으로 저장되어있어, 특정 자료를 특정 위치에 삽입하거나, 삭제할 경우 특정위치 뒤에있는 자료들을 모두 한칸씩 뒤로 이동해서 자리를 비워주거나, 특정위치에 삭제할 자료 뒤에있는 자료들을 모두 한칸씩 앞 당겨야 한다는 번거로운 단점이 있습니다. 순차 자료구조의 사용 예시 순차 표현의 사용 예시로 첫번째는 테트리스의 블록 표현 방법이 예시가 있습니다. 테트리스 블록 한개를 예로들어서, 이 블록의 표..
[C언어]알고리즘 (Time Complexity)시간 복잡도와 빅오 표기법 우선, Algorithm 알고리즘 이란? 어떤 문제를 해결하고자, 구현하고자 하기 전에, 문제의 해결을 위한 절차 또는 단계를 명시적이고, 논리적으로 표현한 것을 알고리즘이라고 합니다. (추상적으로 표현된 알고리즘은 특정한 프로그래밍 언어로만 작성된 것이 아니기에 다른 언어를 사용하는 프로그래머들이 자신이 알고있는 언어를 통해 알고리즘의 해답을 구현할 수 있습니다.) 문제를 해결하기 위한 방안으로 여러 알고리즘이 있을 것인데,, 이중에서 가장 좋은 알고리즘. 효율적인 알고리즘을 판별하기 위한 대표적인 알고리즘의 성능 분석 방법은 시간복잡도와 공간복잡도입니다. 시간 복잡도 알고리즘을 프로그램으로 수행되는데(실행->완료시점)까지 사용된 총 저장공간을 분석하는 방법은 공간복잡도이고, 알고리즘이 수행되는데 실행..