프로그래머스 강의_2

황미라·2023년 1월 14일

Python

목록 보기
2/24
post-thumbnail

2. 선형배열

  1. 배열 : 원소들을 순서대로 늘어놓은 것
    index는 0부터 시작한다.
    L = [1,2,3,4,5]
    라고 하였을 때 0번째 : 1 , 1번째 : 2, 2번째 : 3으로 볼 수 있다.
    L([1]) ==> 2
    L([-1]) ==>5

  2. 리스트(배열) 연산
    1) 원소 덧붙이기
    L.append(6)
    2) 끝에서 꺼내기
    L.pop()
    리스트의 끝에서 하나의 원소를 꺼냄 => 리스트도 변화한다.

    ===> 순삭간에 빠르게 할 수 있는 일
    -> 리스트의 길이와 무관(상수시간)
    -> O()

  3. 리스트(배열) 연산
    1) 배열의 중간에 원소를 삽입하기
    L.insert(3,65)
    => index 3의 위치(네번째)에 원소 65를 삽입하라.
    => 3번 index를 찾아내 삽입하기전 4번째를 5번째 옮기고 3번째를 4번째 자리로 옮긴 후 3번째에 65를 삽입한다.
    => 시간이 뒤에 덧붙이는 것보다 걸리는 것을 알 수 있다.
    2) 원소를 삭제하는 일
    del(L[2])
    => 먼저 index 2 의 내용을 먼저 삭제한 후 앞칸으로 한칸씩 옮겨준후 마지막 인덱스를 삭제한다.
    => 옮겨주는 과정이 있기 때문에 시간이 걸리는 것을 알 수 있다.

  4. 리스트에서 index 2위치 원소를 삭제하라에서 del(L{(2)]와 L.pop(2) 의 차이점은?

    ==> 원소 삽입과 원소 삭제는 리스트의 길이가 길면 오래 걸린다.
    ==> 리스트의 길이에 비례하므로 선형시간이라한다.
    ==> O(n)

  5. 찾고자하는 데이터를 찾을때
    L.index() : 괄호 안에 찾을 내용을 적어준다.

  6. 문제 : 리스트 L 과 정수 x 가 인자로 주어질 때, 리스트 내의 올바른 위치에 x 를 삽입하여 그 결과 리스트를 반환하는 함수 solution 을 완성하세요.

인자로 주어지는 리스트 L 은 정수 원소들로 이루어져 있으며 크기에 따라 (오름차순으로) 정렬되어 있다고 가정합니다.

예를 들어, L = [20, 37, 58, 72, 91] 이고 x = 65 인 경우, 올바른 리턴 값은 [20, 37, 58, 65, 72, 91] 입니다.

힌트: 순환문을 이용하여 올바른 위치를 결정하고 insert() 메서드를 이용하여 삽입하는 것이 한 가지 방법입니다.

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

<답안>

==> 주의 부분을 꼭 포함하자

  1. 문제 :
    리스트 L 은 정수들로 이루어져 있고 그 순서는 임의로 부여되어 있다고 가정하며, 동일한 원소가 반복하여 들어 있을 수 있습니다. 이 안에 정수 x 가 존재하면 그것들을 모두 발견하여 해당 인덱스들을 리스트로 만들어 반환하고, 만약 존재하지 않으면 하나의 원소로 이루어진 리스트 [-1] 를 반환하는 함수를 완성하세요.

예를 들어, L = [64, 72, 83, 72, 54] 이고 x = 72 인 경우의 올바른 리턴 값은 [1, 3] 입니다.
또 다른 예를 들어, L = [64, 72, 83, 72, 54] 이고 x = 83 인 경우의 올바른 리턴 값은 [2] 입니다.
마지막으로 또 다른 예를 들어, L = [64, 72, 83, 72, 54] 이고 x = 49 인 경우의 올바른 리턴 값은 [-1] 입니다.

<답안>

=> for문을 전체를 다 돌아야하기때문에 비효율적인 코드이다.
=> 다른 답안을 참고해 작성해보도록 한다.

==>enumerate를 활용해 인덱스와 값을 한번에 받아오는 것이 가능하므로
이를 활용해 답을 해결할 수 있다.

출처 : 프로그래머스 어서와! 자료구조와 알고리즘은 처음이지

profile
어쩌구저쩌구 개발해보기

0개의 댓글