-
11/4 TIL | 자료구조와 알고리즘은 왜 중요할까?🧐📝 기록/매일의 기록 2022. 11. 4. 15:39
오늘 코딩 도장 문제는 자료 구조 중 하나인 스택(Stack) 개념을 사용하여 풀 수 있었다. 스택은 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조의 자료구조이다. 후입 선출(Last In First Out)의 방식을 따르는데 이는 가장 마지막에 들어간 것이 가장 먼저 나온다는 의미로 프링글스 통처럼 바닥이 막힌 상자라고 생각하면 이해가 쉽다! 스택에 대해서 생각해볼 수 있는 대표적인 예로는 브라우저의 History, 터미널의 cd(디렉터리 변경), pwd(현재 경로 찾기) 명령어 등이 있다.
하여 오늘 코딩 도장 문제를 풀 때 자바의 Stack 컬렉션을 활용하여 문제를 풀었고, 자바스크립트의 배열 메서드로 push, pop을 활용하여 구현하였다. 스택이라는 자료구조는 워낙 잘 알려진 자료구조이다 보니 오늘 문제를 보고 바로 '어? 이거 스택인데?'싶었는데, 그러면서 동시에 개발자에게 자료구조와 알고리즘은 왜 중요한 것인가? 하는 생각이 문득 들어 오늘 TIL은 이 주제를 고찰해봐야겠다 싶었다.
자료구조와 알고리즘은 왜 중요할까?🧐
자료구조와 알고리즘을 통해 만들어지는 것이 바로 프로그램이다. 이때 프로그램을 요리에 비유한다면, 자료구조는 도구, 알고리즘은 레시피, 데이터는 재료라고 생각하면 된다. 즉, 데이터라는 재료를 가지고 자료구조라는 도구를 사용하여 알고리즘이라는 레시피로 프로그램이라는 요리를 만드는 것이다.
자료구조는 대표적으로 앞서 말한 스택, 큐, 그래프, 트리, 링크드 리스트 등이 있다. 메모리를 효율적으로 사용하고 안정적으로 데이터를 처리하기 위해 사용한다. 상황에 따라 유용하게 사용될 수 있도록 만들어져 있는데, 이는 반대로 말하면 어떤 상황에서는 느리고 불안정할 수 있다는 의미도 된다. 그렇기 때문에 상황에 맞는 올바른 자료 구조를 고르는 능력이 필요하다.
결국, 자료 구조는 일차원인 컴퓨터 메모리를 현실에 대응되도록 구조를 만든 것으로, 앞서 말했듯이 어떤 상황에서는 유용하고, 어떤 상황에서는 불안정할 수도 있다. 그렇기 때문에 항상 완벽한 자료 구조는 없고, 개발자는 상황에 맞게 적절한 자료구조를 선택할 수 있어야 한다. 그러기 위해서 자료구조를 잘 알아야 한다.
알고리즘은 특정 문제를 효율적으로 빠르게 해결하겠다는 궁극적인 목표를 가지고 있는데, 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것을 말한다. 앞서 비유했듯이 요리에 빗대어 다시 말해보자면, 요리사가 맛있는 요리를 만들기 위해서 좋은 재료와 제대로 된 도구와 레시피가 갖춰져야 한다. 요리사를 개발자로 치환하면, 개발자는 좋은 프로그램을 만들기 위해서 양질의 데이터와 적합한 자료구조와 알고리즘이 갖춰져야 한다는 것이다.
좋은 재료를 가지고 정작 그 재료에 안 맞는 도구와 레시피를 사용한다면 그 요리는 맛이 없을 수밖에 없다. 이처럼 개발자도 좋은 데이터를 가지고 적합한 자료구조와 알고리즘을 사용할 줄 모른다면 좋은 프로그램을 만들 수 없다. 그렇기 때문에 프로그램을 잘 만들기 위해서, 다시 말해 개발을 잘하기 위해서는 자료구조와 알고리즘은 필수 불가결한 요소이다.
이번 주에 TIL로 그리디 알고리즘도 정리하고, 오늘 스택을 사용해보면서 자료구조와 알고리즘에 한발자국 더 다가선 느낌이었는데, 이게 왜 개발자에게 중요한 것인지에 대해서도 생각을 정리하고 적어보니 단순히 '공부해야지'라는 마음보다는 '제대로 공부해야겠다'하는 >>단호한 결의<<가 생겼다! 이런 부분들도 중간중간 야무지게 챙겨서 강보니에서 짱보니가 되어보자. 오늘도 파이팅!💪
'📝 기록 > 매일의 기록' 카테고리의 다른 글
11/6 TIL | 을지로에서 열린 열정 대부흥회🕺🏻 (1) 2022.11.06 11/5 TIL | 순항 중인 열정 되찾기 프로젝트. (0) 2022.11.05 11/3 TIL | 난 몰랐어 코테가 이리 다채로운지!🕺🏻 (1) 2022.11.03 11/2 TIL | 그리디 알고리즘(Greedy Algorithm) (0) 2022.11.02 11/1 TIL | 대칭 키와 비대칭 키 암호화 방식 (0) 2022.11.01