서론
대학교 수강신청 때부터 "다른 건 안 들어도 자료구조 강의는 꼭 들어야 한다"라는 말을 들어왔으며 프로그래밍에 있어서 필수인 것은 알고 있었으나 정작 왜 중요한지는 생각해보지 않다가 이제야 하게 된다. 그럼 왜 이제야 아려고 할까?
나는 예시로 'A물건을 B 위치로 옮기는 작업'을 할 때 뭐 때문에 옮기고, 내 에너지를 써야 하는지 이해가 안 가면 집중도 잘 안 되고 아웃풋이 그만큼 잘 나오지 않았다. 모든 일엔 명분이 있다고 생각한다. 왜 배우는지를 알아야 관심을 가지고, 관심을 가져야 자발적으로 공부를 할 수 있다고 생각한다.
그리고 앞으로는 취업 준비를 하며, 그동안 수박 겉핥기로만 알던 자료구조와 알고리즘을 차근차근 포스팅으로 정리하려고 한다.
다음은 https://www.tutorialspoint.com/data_structures_algorithms/index.htm 의 내용을 번역한 내용이다.
본론
자료구조는 데이터가 효과적으로 사용되기 위한 자료 저장법의 프로그래밍 방법입니다. 거의 모든 기업의 프로그램은 다양한 타입의 자료구조를 사용하고 있습니다.
자료구조 왜 배우나요?
프로그램이 방대하고 복잡한 데이터를 가질 때 3가지의 흔한 문제를 직면하게 됩니다.
- 데이터 검색 - 자료구조가 적용되어있지 않은 저장소에 백만 개의 데이터를 가지고 있다고 해봅시다. 프로그램이 아이템을 하나 찾는다면 매번 느리게 하나부터 백만 개의 데이터를 훑어봐야 합니다. 물론 데이터가 커질수록 더 느려지겠죠. 😐
- 프로세서의 속도 - 프로세서가 아무리 좋아도 데이터가 방대해지면 해질수록 속도는 떨어질 수밖에 없습니다.
- 다중 요청 - 많은 유저가 웹서버에서 동시에 데이터를 검색하면 속도가 떨어집니다.
위의 언급된 문제들은 자료구조가 해결해줍니다. 데이터가 자료구조로 정돈되어 있다면, 데이터 검색을 하는데에 모든 아이템이 필요하지 않고, 필요한 데이터가 즉시 검색됩니다.
알고리즘은 또 왜 배워야하나요?
알고리즘은 점진적인 절차로, 원하는 결과를 얻기 위해 특정 순서로 실행될 명령어의 집합을 의미합니다.
알고리즘은 일반적으로 근본적인 언어와는 독립되어 만들어져 있습니다. 즉, 알고리즘은 여러 프로그래밍 언어로 구현될 수 있습니다. ( Java , C ,... 무엇이던 상관없습니다.)
자료구조의 관점으로, 아래는 중요한 알고리즘의 카테고리들입니다.
- 검색 - 자료구조의 아이템을 검색하기 위한 알고리즘
- 정렬 - 정확한 순서로 아이템을 정렬하기위한 알고리즘
- 삽입 - 자료구조안에 아이템을 삽입하는 알고리즘
- 수정 - 자료구조안에 존재하는 아이템을 수정하기 위한 알고리즘
- 삭제 - 자료구조안에 존재하는 아이템을 삭제하기 위한 알고리즘
아래는 흔히 나오는 컴퓨터 문제들입니다. 역시 자료구조 / 알고리즘을 활용하여 해결할 수 있습니다.
- 피보나치 수열
- 배낭 문제
- 하노이 탑
- 그래프 최단 경로 찾기
- 다익스트라 알고리즘
- 프로젝트 스케쥴링
결론
자료구조와 알고리즘은 어떤 프로그래밍 문제가 있을 때 그걸 가장 효율적으로 해결하기 위하여, 전 세계인이 연구한 일종의 프로그래밍 교과서와 같다고 생각한다.
수많은 프로그래머가 고생하고 헌신한 덕에 나는 편안히 어떻게 사용하는지만 알면 된다.
백지 같은 상황에 그림 같은 해결책을 공유해준 수많은 프로그래머들에게 존경을 표하며 이번 포스팅을 마친다.
'자료구조와 알고리즘 (Java)' 카테고리의 다른 글
[자료구조][Java] 이중 연결 리스트/더블 링크드 리스트(Doubly Linked List) (0) | 2022.04.20 |
---|---|
[자료구조][Java] 연결리스트/링크드 리스트(Linked List) (0) | 2022.04.19 |
[자료구조][Java] 스택 (Stack) (0) | 2022.04.19 |
[자료구조][Java] 큐 (Queue) (0) | 2022.04.19 |
[자료구조][Java] 배열( Array ) (0) | 2022.04.19 |
댓글