Q. 우리는 왜 알고리즘과 자료구조를 배울까?
해결하고자 하는 문제에 따라 최적의 해법이 다 다르다.
자료구조 / 알고리즘을 통해 빠르고 효율적인 답을 얻을 수 있다.
알고리즘
[사전적 정의] 어떤 문제를 해결하기 위한 절차, 방법, 명령어들의 집합
[프로그래밍] 주어진 문제의 해결을 위한 자료구조와 연산 방법에 대한 선택
선형 배열 (Linear Arrays)
Python에서의 리스트는 다른 프로그래밍 언어들과는 달리 다양한 타입들의 원소를 가질 수 있다.
- 상수 시간이 걸리는 연산: 리스트의 길이와 상관없이 시간이 걸린다. (리스트 길이와 상관없이 수행됨)
- .pop( ) : 리스트 마지막 원소를 꺼내는 연산
- .append( ) : 리스트 마지막에 괄호 안의 원소를 추가하는 연산
- 선형 시간이 걸리는 연산 : 리스트의 길이가 길면 오래 걸린다. (리스트의 길이에 비례하는 시간)
- .del( ) : 리스트의 특정 위치에 있는 원소를 삭제하는 연산
- .insert( ) : 리스트의 특정 위치에 원소 추가하는 연산
- 그 외 연산
- .index( ) : 리스트의 원소 탐색하는 연산
1강 과제 : 리스트 합 구하기
def solution(x):
return x[0] + x[len(x) - 1]
2강 과제 : 정렬된 리스트에 원소 삽입
def solution(L, x):
for idx, num in enumerate(L):
if num>=x:
L.insert(idx,x)
break
if L[-1] < x:
L.append(x)
return L
2강 과제 : 리스트에서 원소 찾아내기
def solution(L, x):
answer = []
if x in L:
for i, y in enumerate(L):
if(y == x):
answer.append(i)
else:
answer.append(-1)
return answer
'Algorithm' 카테고리의 다른 글
[프로그래머스 알고리즘] 10강: 양방향 연결 리스트 (Doubly Linked Lists) (0) | 2021.07.15 |
---|---|
[프로그래머스 알고리즘] 7강, 8강, 9강: 연결 리스트 (Linked Lists) (0) | 2021.07.14 |
[프로그래머스 알고리즘] 6강: 알고리즘 복잡도 (Complexity of Algorithm) (0) | 2021.07.13 |
[프로그래머스 알고리즘] 4강, 5강: 재귀 알고리즘 (Recursive Algorithm) (0) | 2021.07.13 |
[프로그래머스 알고리즘] 3강: 배열 - 정렬과 탐색 (Sorting & Searching) (0) | 2021.07.12 |