[리스트/list]

joon_1592·2020년 12월 28일

파이썬 자료구조

목록 보기
1/7

python의 list는 string처럼 indexing, slicing이 가능하다

L = [1, 2.2, 'python'] # int, float, str 모두 저장 가능
l1 = list() # empty list
l2 = [] # empty list

letters = ['A', 'B', 'C', 'D', 'E', 'F']
n = len(letters) # n = 6
last_letter = letters[-1] # 마지막 원소 접근 방법

list L에 대하여 L[b:e:s]로 slicing이 가능하다
b = begin, e = end, s = step
s > 0일 때, b < e이어야 하고 s < 0일 때 b > e이어야 한다
(그렇지 않으면 빈 list를 생성한다)

a = [0, 1, 2, 3, 4, 5, 6, 7, 8]
print(a[1:7:2]) # [1, 3, 5]
print(a[::-1]) # [8, 7, 6, 5, 4, 3, 2, 1, 0]
print(a[::-4]) # [8, 4, 0]

자주 사용되는 메소드는 다음과 같다.

# L은 list, x는 임의의 객체
# 추가
L.append(x) # x를 L의 끝에 추가
L.extend(L2) # 리스트 L2의 모든 원소를 L1에 추가

# 삭제
L.pop() # 마지막 원소 제거 및 반환
L.pop(x) # L[x]를 제거하고 그 값을 반환
L.clear() # L을 빈 리스트로 만듦
L.remove(x) # 처음으로 값이 x인 데이터 제거, 반환X

# 정렬
L.sort() # L을 오름차순으로 정렬
L.sort(reverse=True) # L을 내림차순으로 정렬

예제 K번째 수
indexing, slicing을 이해하고 있다면 충분히 쉽게 풀 수 있다.
예제의 commands = [[2, 5, 3], [4, 4, 1], [1, 7, 3]]의 경우

commands[0] = [2, 5, 3]
commands[1] = [4, 4, 1]
commands[2] = [1, 7, 3]

이므로

commands[0][0] = 2
commands[0][1] = 5 
commands[0][2] = 3

이 된다.

def solution(array, commands):
	answer = []
    for L in commands:
    	# commands를 하나씩 뽑아서 생각하기
    	b = L[0] - 1      # begin index
        e = L[1]          # end index
        t = L[2] - 1      # target index
        tmp = array[b:e]  # tmp는 정렬하기 전 리스트
        tmp.sort()        # 정렬
        answer.append(tmp[t]) # 정답을 저장
    return answer

array의 길이를 n, commands의 길이를 m이라 하면, for 에서 O(m)이고, for 내부에서 sort는 O(nlogn)이므로 solution의 시간복잡도는 O(mnlogn)이다. 그러나 문제에서 n은 100이하, m은 50이하이므로 크게 문제가 되지 않는다.

profile
공부용 벨로그

0개의 댓글