-
23.08.25. 19차
오늘도 오전 9시에 튜터님의 알고리즘 세션이 있었다.
오늘은 시간복잡도와 공간복잡도, 배열과 링크드리스트, List등 코드를 짤때 고려해야할 점들에 대한
이야기들을 들었다.
시간복잡도가 높아지면 시간이 오래걸리게 되고,
공간복잡도가 높아지면 메모리 할당량이 늘어나게 된다.
그래서 시간복잡도와 공간복잡도를 최대한 줄여서 효율적으로 만드는게 좋아보였다.
우선순위는 시간복잡도가 공간복잡도 보다 먼저라고 하셨는데 요즘 컴퓨터들의 메모리 용량이 늘어나서 그런 것 같다.
배열의 경우에는 인덱스를 사용해 빠른 접근과 조회의 강점이 있지만 크기가 바뀌거나 삽입및 삭제를 해야한다면 다시 만들어지는 단점이 있었다.
반면에 링크드리스트는 기차의 여러 칸들처럼 삽입과 삭제에 강점을 가지고 있었지만 반대로 접근과 조회에 있어선 한번에 찾아지는게 아닌 무조건 전부 다 찾아봐야하는 단점이 있었다.
이 둘의 장점들을 합친게 바로 List같았다.
List는 Count로 세는데 Remove를 통해 링크드리스트처럼 요소삭제도 가능하고, 배열처럼 인덱스로 접근하여 조회와 접근에 용이했다. 그리고 크기를 동적으로 조절이 가능해서 요소를 추가하거나 제거해도 크기가 자동으로 조절되는 강점이 있다.
배열과 링크드리스트, List들은 각자 상황에 따라서 골라서 잘쓰면 될것같다.
그리고 오후 8시에 튜터님의 알고리즘문제풀이에 대한 설명이 있었는데, 문제 자체에 대한 설명을 해주셨다기 보단
문제를 풀때 그림을 그려서 생각해보면 좀더 쉽게 풀수 있을거라고 설명해주셨고, 그림이 아닌 경우에는 입출력 예를 통해
한번씩 써보고 직접 눈으로 보면 시각화가 되어 좀더 편하게 코드를 작성할 수 있다고 말씀 하셨다.
다음주부턴 알고리즘 문제를 풀때 좀더 쉽게 풀수 있을거라는 자신감이 생겼다.