본문 바로가기

STUDY

(40)
스택 (Stack) 들어가며 대학교 수업에서 처음 스택에 대해서 배울 때 대체 저런 자료구조가 어디에 쓰일지 궁금했다. 이내 교수님께서 웹페이지에서 뒤로가기를 설명하시면서 스택에 대한 예시를 들어주셨을 때 단번에 이해할 수 있었다. 개념만 들었을 때 조금 독특하지만 사실 컴퓨터 곳곳에 쓰이는 자료구조라 지금은 너무도 친숙한 자료구조가 되어버렸다. 개념 및 특징 자료를 차곡차곡 쌓고 뺄때는 제일 최근에 쌓은 거부터 빼내는 일명 FILO 구조이다. 배열과 리스트 두가지 자료구조를 활용하여 구현할 수 있어 둘 다 구현해보았다. 이번 구현에서는 이전에 구현한 단일 연결 리스트 구현을 활용했는데 특별히 make 파일을 만들어 컴파일해보았다. 코드 https://github.com/yell0w-bear/data-structure/tr..
이중 연결 리스트 (Double Linked List) 들어가며 작심삼일, 벌써 자료구조공부를 시작한지 3일이 되간다. 이번에는 꾸준히 공부해서 자료구조를 전체적으로 한번 공부하는 기회가 됬으면 한다. 개념 및 특징 노드가 prev 포인터를 추가로 가진다는 점을 제외하고는 단일 연결 리스트와 거의 유사하다. 한 노드에서 앞뒤 노드의 정보를 바로 얻을 수 있기 때문에 오히려 구현은 단일 연결 리스트보다 단순했던 거 같다. tail을 구현할지말지 고민을 했지만, 책에서 tail에 대한 언급은 없어서 일단 tail 구현은 하지 않았다. 코드 https://github.com/yell0w-bear/data-structure/tree/main/double_linked_list 마무리 연결 리스트들은 그래도 이전에 밤새가며 구현했던 경험들이 있어서인지 조금은 수월하게 ..
원형 연결 리스트 (Circular Linked List) 들어가며 구현은 어제 해두고 글을 작성하지 않았다는 것을 발견했다. 역시 전문 블로거가 되려면 아직 한참 멀었다. 개념 및 특징 단일 연결리스트와 구현이 거의 동일한데, 한 가지 큰 차이점은 마지막 tail의 next가 첫번째 노드가 된다는 점이다. 코드 https://github.com/yell0w-bear/data-structure/tree/main/circular_linked_list 마무리 2일차! 구현 난이도가 아직 어렵지는 않지만 그래도 꾸준히 공부를 해나가고 있다는 점에 의의를 둔다.
단일 연결 리스트 (Single Linked List) 들어가며 처음 자료구조를 배울 때 연결 리스트는 나에게 정말로 복잡하고 어려운 구현이었다. 지금은 내가 가야하는 길의 30% 정도 왔다고 생각하는데 이 시점에서 모든 공부들을 한번 정리해보고 가고자 한다. 정리의 첫 걸음을 자료구조로 시작해보고자 하는데 그 중에서도 연결리스트 구현으로 첫 걸음을 떼보고자 한다. 아직 가야할 길이 많이 남았지만 지금은 나에게 연결 리스트 구현은 크게 어려운 과제가 아니라 느껴짐에 새삼 감사함을 느낀다. 개념 및 특징 노드가 한쪽 방향으로 연결된 형태를 가지는 리스트이다. 코드 https://github.com/yell0w-bear/data-structure/tree/main/single_linked_list 마무리 코딩이 너무 오랜만이라 생각보다 시간이 걸렸다.... 오늘..
[백준 B1] 성 지키기 (1236번) www.acmicpc.net/problem/1236 1236번: 성 지키기 첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다 www.acmicpc.net 문제 영식이는 직사각형 모양의 성을 가지고 있다. 성의 1층은 몇 명의 경비원에 의해서 보호되고 있다. 영식이는 모든 행과 모든 열에 한 명 이상의 경비원이 있으면 좋겠다고 생각했다. 성의 크기와 경비원이 어디있는지 주어졌을 때, 몇 명의 경비원을 최소로 추가해야 영식이를 만족시키는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작..
[백준 S3] 단어 뒤집기 2 (17413번) www.acmicpc.net/problem/17413 17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 문제 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 있다. 문자열의 시작과 끝은 공백이 아니다. ''가 문자열에 있는 경우 번갈아가면서 등장하며, '
[백준 S1] 이동하기 (11048번) www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 문제 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 현재 (1, 1)에 있고, (N, M)으로 이동하려고 한다. 준규가 (r, c)에 있으면, (r+1, c), (r, c+1), (r+1, c+1)로 이동할 수 있고, 각 방을 방문할 때마..
[백준 B2] 피보나치 수 5 (10870번) www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ..