2024/01/29 4

백준 - 괄호 9012

괄호를 풀기 전에 스택이라는 개념을 잡고 풀어보자. Stack은 '쌓다', 또는 '무언가가 쌓여 있는 더미'등을 의미한다. 스택은 의미 그대로 어떤 데이터를 삽입/삭제하는 과정을 '쌓는' 형태로 나타낼 수 있는 자료구조이다. 스택은 FILO 구조로 처음에 넣은 데이터는 가장 아래에 위치하게 된다. 다음 들어오는 데이터들은 그 위에 순서대로 쌓인다. 데이터들을 뺄 때는 제일 위에 있는 데이터부터 빼야 한다. 결과적으로 가장 처음에 넣은 데이터는 가장 마지막에 빠지게 된다. 이를 First-In-Last-Out이라고 한다. 반대로 가장 마지막에 들어왔던 데이터는 가장 먼저 빠진다 이를 Last-In-First-Out 이라고 한다. 이것이 스택의 특징이다. 스택에 대한 예로는 인터넷 웹 서핑을 할 때 접속한 ..

열혈 자료구조 - 재귀의 활용 하노이 타워 코드 및 실행

하노이 타워 코드 #include void HanoiTowerMove(int num, char from, char by, char to) { if (num == 1)// 이동할 원반의 수가 1개라면 { printf("원반1을 %c에서 %c로 이동 \n", from, to); } else { HanoiTowerMove(num - 1, from, to, by); printf("원반%d을(를) %c에서 %c로 이동 \n", num, from, to); HanoiTowerMove(num - 1, by, from, to); } } int main(void) { // 막대 A의 원반 3개를 막대 B를 경유하여 막대 C로 옮기기 HanoiTowerMove(3, 'A', 'B', 'C'); return 0; }

열혈 자료구조 - 재귀적 호출의 이해

재귀는 자료구조와 알고리즘에 있어서 매우 중요한 요소이고,C언어는 이렇듯 중요한 재귀를 지원하는 언어이다. 재귀함수의 기본적인 이해 재귀함수란 무엇인가?재귀함수란 다음과 같이 함수 내에서 자기 자신을 다시 호출하는 함수를 의미합니다. void Recursive(void){ printf("Recursive call! \n"); Recursive(); // 나 자신을 재호출한다}  위 형태의 함수가 재귀호출이다.그렇다면 재귀 호출은 어떻게 이해해야 할까?  다음 그림과 같은 구조는 매우 단순해 보이지만,그림 내용대로 재귀함수를 이해하는 것이 여간 쉬운 일은 아니다. 그렇다고 위 그림이 재귀호출에 대해서 잘못 설명하고 있다거나 하지는 않는다. 해당 함수는 완료되지 않은 함수를 다시 호출하는 것이 ..