개발일지 시작의
알고리즘 쉽지않다 오랜만에 들으니까 옛날 생각남
개발 업무내용
- 개발자들에게 알고리즘 공부가 필요한 이유를 이해한다.
- 알고리즘을 학습하기 위한 기본 코드 구현력을 높인다.
- 시간 복잡도, 공간 복잡도에 대해 배운다.
- 어레이와 링크드리스트에 대해 배우고 차이점을 익힌다.
- 이진 탐색의 효율성과 전제 조건에 대해 배운다.
- 재귀함수의 방법과 전제 조건에 대해 배운다.
오늘의 이슈/고민..그리고 해결한 내용
- 파이썬 리스트 인덱싱
a = [1, 2, 3, 4, 5]
a[-1] = 5
a[-5] = 1
알파벳의 아스키 코드값이 대문자와 소문자가 달라 같은 알파벳이라도 계산하면 값이 다르게 나온다. 알파벳 빈도수를 구하는 문제에서 소문자를 대문자로 써서 계산하다 음수가 나와서 결과가 이상하게 나왔는데 음수로 찾아서 이상한 곳에 저장한 거였다.
- array와 linked list
경우 | Array | LinkedList |
---|
특정 원소 조회 | O(1) | O(N) |
중간에 삽입 삭제 | O(N) | O(1) |
데이터 추가 | 데이터 추가 시, 공간이 다 찬 경우 새로 할당을 받아야함 | 공간과 상관없이 맨 뒤의 노드만 동적으로 추가하면 됨 |
정리 | 데이터에 접근하는 경우가 빈번할 때 사용 | 삽입과 삭제가 빈번할 때 사용 |
Array
- 배열은 생성될 때 항상 크기가 주어진다
- 생성된 배열에 할당되는 메모리 공간은 연속적이다 => 인덱스 할당 가능 => 쉽게 직접적으로 접근 가능함
List
- 메모리 주소가 연속적일 수도 아닐 수도 있다
- 배열과는 다르게 다음 데이터를 알기 위해서는 그 데이터가 저장되어 있는 주소를 알아야 한다 => linked list는 자신이 가진 데이터와 다음 데이터의 주소값을 같이 가지고 있다
파이썬 리스트는 왜 인덱스를 가질까? 파이썬 리스트는 동적 배열로 구현되어 있기 때문
- 이진탐색은 순차탐색보다 효율이 좋지만 정렬이 되어 있는 경우에 사용할 것
- 재귀함수를 쓰기 전에는 탈출 조건에 대해 생각해봐야함(그렇지 않으면 무한정 루프를 돌 수 있음)
To-do List
팀 문제 1개 풀기, 2주차 숙제하기, 3-4주차 알고리즘 강의 듣기, 링크드 리스트 복습