아이디어지니
아이디어지니 : 개발이야기
아이디어지니
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • 안드로이드 (11)
    • 50자다이어리 (2)
    • 코딩테스트 (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 1181
  • cmp_to_key
  • functools
  • K디지털기초역량훈련
  • setrecursionlimit
  • App Restart
  • 단어정렬
  • onStartCommand
  • TextView
  • TextUtils
  • 안드로이드 서비스
  • 파이썬
  • 나도 할 수 있는 Java&Spring 웹 개발 종합반
  • 내일배움카드
  • 커스텀정렬
  • deprecated
  • andorid
  • 코딩테스트
  • 에라토스테네스의 체
  • null check
  • 앱재시작
  • greenDAO
  • Interpolator
  • 바인딩 서비스
  • 안드로이드 애니메이션
  • 안드로이드
  • 패스트캠퍼스
  • 백준
  • null
  • jcenter

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아이디어지니

아이디어지니 : 개발이야기

코딩테스트

이코테 3강 리뷰 (리스트 자료형)

2022. 5. 12. 22:13

리스트

- 여러개의 데이터를 연속적으로 담아 처리하기 위해 사용하는 자료형

- C나 자바의 배열 기능 및 연결리스트와 유사한 기능을 지원한다.

- 배열 혹은 테이블이라고 부르기도 한다.

 

리스트의 초기화

- 대괄호[] 안에 원소를 넣어 초기화하고 쉼표(,)로 원소를 구분

- 비어있는 리스트를 선언할 때는 list() 또는 [] 를 이용한다.

- 리스트의 인덱스는 0부터 시작하고 리스트의 원소에 접근할 때는 인덱스의 값을 대괄호 안에 넣는다.

a = [1, 2, 3, 4, 5]
print(a[3]) # 4번째 인 4가 출력된다.

a[4] = 5 # 리스트인 변수 a의 4번째 원소를 5로 변경
print(a) # [1, 2, 3, 5, 5] 가 출력된다.

# 크기가 n이고 모든 값이 0인 리스트 초기화
n = 10
a = [0] * n

 

리스트의 인덱싱(Indexing)

- 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것

- 인덱스 값은 양의 정수와 음의 정수 사용

- 음의 정수 사용 시 거꾸로 탐색(-1 부터 차례대로 작아지는 방식으로 접근 가능)

a = [1, 2, 3, 4, 5]

print(a[4]) #  5번째 원소인 5 출력

print(a[-1]) # 뒤에서 첫번째 원소 5 출력

print(a[-3]) # 뒤에서 세번째 원소 3 출력

 

리스트의 슬라이싱(Slicing)

- 연속적인 위치를 갖는 원소들을 가져와야 할 때 사용 

- 콜론(:)을 사용하여 시작 인덱스와 끝 인덱스를 설정할 수 있음

- 끝 인덱스는 실제 인덱스보다 1을 크게 설정해야함

# 인덱스번호 : a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print(a[1 : 4])
# 두번째 원소 부터 네 번째 원소까지 [2, 3, 4] 출력
# a[1] ~ a[4-1=3]
# a[1] a[2] a[3] 출력됨

 

리스트의 컴프리헨션

- 리스트를 초기화하는 방법 중 하나로 대괄호 안에 조건문과 반복문을 적용하여 리스트를 초기화 한다.

# 기본 사용법
array = [i for i in range(10)] # 0~9 까지 10개의 수를 포함하는 리스트를 만든다.

# for문 뒤 if로 조건문 적용
array = [i for i in range(20) if i % 2 == 1] # 0부터 19까지의 수 중 홀수만 포함하는 리스트를 만든다.

# 기본 코드 4줄 리스트 컴프리헨션 1줄로 편리하게 리스트를 초기화 할 수 있다.
array = []
for i in range(20) :
	if i % 2 == 1 :
    	array.append(i)

# i*i 로 for문 앞의 값 변경
array = [i*i for i in range(1, 10) # 1부터 9까지 수들의 제곱 값을 포함하는 리스트를 만든다.
array = list(i*i for i in range(1, 10)) #1부터 9까지 수들의 제곱 값을 포함하는 리스트를 만든다.

- 리스트 컴프리헨션은 2차원 리스트를 초기화할 때 효과적으로 사용할 수 있다.

- 4 x 3 크기의 2차원 리스트 초기화 예

n = 4
m = 3
array = [[0] * m for _ in range(n)]

- for문에서의 언더바(_) : 반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 사용

- 4 x 3 크기의 2차원 리스트 초기화 잘못된 예

array = [[0] * 3 ] * 4

# 초기화는 정상적으로 되나 내부적으로는 첫 행이 4번 복사되는 결과가 발생함
# 단순히 리스트를 4번 곱하게 되면 [[0] * 3]인 리스트의 참조 값을 4번 복사하는 것과 같음

# 0 0 0 
# 0 0 0 
# 0 0 0 
# 0 0 0 

array[1][1] = 5
print(array) # array[1][1] 뿐 아니라 [0][1] [2][1] [3][1] 까지 바뀜
# 0 5 0
# 0 5 0
# 0 5 0
# 0 5 0

 

코딩테스트에서 자주 쓰이는 리스트의 주요 메서드

함수명 사용법 설명 시간 복잡도
append() a.append(값) 리스트에 원소를 하나 삽입한다. O(1)
sort()

a.sort() 오름차순 정렬 O(NlogN)
a.sort(reverse = True) 내림차순 정렬
reverse() a.reverse() 리스트 원소의 순서를 모두 뒤집는다. O(N)
insert() a.insert(인덱스, 삽입할 값) 특정한 인덱스 위치에 원소를 삽입 O(N)
count() a.count(특정 값) 리스트에서 특정한 값을 데이터의 개수를 셀 때 사용 O(N)
remove() a.remove(특정 값) 특정한 값은 갖는 원소를 제거. 값을 가진 원소가 여러개면 하나만 제거함. O(N)
index() a.index(특정 값) 특정 값을 가지고 있는 0에서 가장 가까운 위치의 index 반환 O(N)

 

a = [1, 1, 2, 3, 3, 4]
# 값이 3인 데이터 개수 세기
print(a.count(3)) # 3이 두개이므로 2 출력

# 값이 1인 데이터 하나만 삭제 
a.remove(1)
print(a) # 1인 원소 하나만 삭제되어 [1, 2, 3, 3, 4] 출력됨

 

리스트에서 특정 값을 가지는 원소를 모두 제거하기

- remove 메서드는 특정 값을 가지는 원소 하나만 제거하기 때문에 모두 제거하려면 다음과 같은 방법을 사용한다.

a = [1, 2, 3, 4, 5, 5, 5]
remove_set = {3, 5}

result = [i for i in a if i not in remove_set]
print(result) # [1, 2, 4]

i in a # 리스트 a에서 i라는 변수가 
for # 하나씩 돌면서
if i not in remove_set # i가 remove_set에 포함되어 있지 않다면
i # 조건에 만족하는 i만 리스트에 포함

- if list명 list가 존재?

- if not list명 list 비어있는지?

본 글은 나동빈 - 이코테 2021 강의 몰아보기를 토대로 작성한 정리입니다.

좋은 강의를 올려주신 나동빈님께 감사드립니다.

또한 코딩테스트 문제를 풀면서 필요한 부분들을 추가하고 있어 강의내용과 다를 수 있습니다!

'코딩테스트' 카테고리의 다른 글

이코테 5강 리뷰 (사전, 집합 자료형)  (0) 2022.05.13
이코테 4강 리뷰 (문자열, 튜플 자료형)  (0) 2022.05.13
이코테 2강 리뷰 (수 자료형과 연산)  (0) 2022.05.10
이코테 1강 리뷰 (알고리즘 성능 평가)  (0) 2022.05.10
    '코딩테스트' 카테고리의 다른 글
    • 이코테 5강 리뷰 (사전, 집합 자료형)
    • 이코테 4강 리뷰 (문자열, 튜플 자료형)
    • 이코테 2강 리뷰 (수 자료형과 연산)
    • 이코테 1강 리뷰 (알고리즘 성능 평가)
    아이디어지니
    아이디어지니
    할까 말까 할 때는 하라

    티스토리툴바