알고리즘

알고리즘 : 선형 배열(Linear Arrays)

Brad Daeho Lee 2021. 2. 21. 19:15

개념

선형 배열은 데이터들이 일 직선으로 나열되어있는 형태를 말합니다. Python에서는 여러가지 데이터들을 줄지어서 나열시킬 수 있는 리스트(list)가 있습니다.

 

알고리즘을 할 때 리스트에서 사용할 수 있는 연산들이 있습니다. 리스트 길이와 관계없이 빠르게 실행되는 연산 그리고 리스트의 길이에 비례해서 시간이 걸리는 연산, 크게 이 두가지 종류의 연산들이 있습니다. 그리고 마지막으로 list index 개념에대해서 이야기해보겠습니다.

 

리스트 길이에 관계없이 실행 속도가 빠른 연산

  • .append() : 데이터를 리스트에 덧붙일 때 사용됩니다. 추가된 데이터는 리스트 맨 뒤에 자리에하게 됩니다.

  • .pop(): 리스트 맨 끝에 있는 데이터를 밖으로 빼올 때 사용할 수 있습니다. 

 

리스트 길이에 비례해서 실행되는 연산

  • .insert(): 리스트에 원하는 데이터를 원하는 자리에 넣을 수 있습니다.

    • 예) list.insert( index_number, 데이터 ) 

  • del: 리스트에서 삭제하고 싶은 데이터를 데이터의 index 넘버를 사용해서 삭제할 수 있습니다.

    • 예) del list[index_number]

 

리스트 [index]

index는 리스트안에있는 데이터들이 차례대로 줄지어 있는데 어떤 데이터가 전체 데이터에서 몇번째에 있는지 알려줄 때 사용한다. index는 indexnegative index 두가지 종류가 있습니다.

 

index

  • list 에서부터 데이터 순서를 센다.  

  • 0부터 순서를 센다.

  • index()연산은 괄호안에 데이터를 쓰면 그 데이터 index를 알려준다.

    • 예) list.index(데이터)

negative index

  • list 에서부터 데이터 순서를 센다.

  • -1부터 순서를 센다.

 

리스트 index

 

 

문제

리스트 L 과 정수 x 가 인자로 주어질 때, 리스트 내의 올바른 위치에 x 를 삽입하여 그 결과 리스트를 반환하는 함수 solution 을 완성하세요. 인자로 주어지는 리스트 L 은 정수 원소들로 이루어져 있으며 크기에 따라 (오름차순으로) 정렬되어 있다고 가정합니다.

 

주의: 리스트 내에 존재하는 모든 원소들보다 작거나 모든 원소들보다 큰 정수가 주어지는 경우에 대해서도 올바르게 처리해야 합니다.

 

 

 

 

 

문제 풀이

def solution(L, x):
    for i in range(len(L)):
        if L[i] > x:
            L.insert(i,x)
            break
    if L[0] > x:
        L.insert(0, x)
    if L[-1] < x:
        L.append(x)
    answer = L
    return answer

반복문 안에 if 구문을 사용할 때 굳이 else를 쓰지 않아도 if 구문 조건에 만족하지 않았을 때 반복문이 이어서 계속 실행된다는걸 배웠다.

 

문제에 주의부분이 없었으면 풀 수 있었을까? x 가 리스트 맨 앞이나 맨 끝에 올 수도 있다는 생각을 할 수 있어야겠다.

 

마지막으로 for in 반복문에 range를 사용했을 때 i가 0부터 시작하는것도 기억해둬야겠다.