그동안 웹개발공부에 치중해서 코딩테스트를 위한 공부에 대해 소홀히 한 부분이 있다. 따라서 2022년 코딩테스트들을 대비하기 위해 Python에서 자주 쓰이는 syntax나 내가 몰랐던 부분을 이곳에 정리하려고 한다..
강의는 동빈 나님의 이것이 취업을 위한 코딩테스트이다 2021 을 보면서 공부 중이다. 주변 지인의 추천으로 듣고 있는데 정말 좋은 강의 인것 같다. 코테를 준비하고 있는 분이라면 들으면 도움이 많이 될 것 같다 👍
이것이 취업을 위한 코딩테스트 강의: https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나이다. 리스트 컴프리헨션을 사용하면:
### 0부터 100까지의 수를 초기화하는 코드
# 기존
l=[]
for i in range(101):
l.append(i)
# List Comprehension
l=[ i for i in range(101)]
### 조건문을 추가하여 해당하는 원소만 리스트에 추가 가능
# 1부터 50까지 짝수만 추가하는 코드
l= [i for i in range(51) if i%2==0]
### 2차원 배열을 0으로 초기화 할 때
N= 3
M= 4
l= [ M* [0] for _ in range(N)]
print(l) # [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
메서드 | 사용법 | 기능 | Time Complexity |
---|---|---|---|
append() | 리스트명.append() | 리스트 끝에 원소를 삽입 | O(1) |
pop() | 리스트명.pop() | 리스트의 마지막 원소를 꺼내서 return 해줌 | O(1) |
sort() | 리스트명.sort() | 내림차순 정렬. 파라미터로 reverse=True가 설정되어 있으며 False시 오름차순 정렬 | O(NlogN) |
reverse() | 리스트명.reverse() | 리스트의 원소순서를 뒤집음 | O(N) |
insert() | 리스트명.insert(삽입할 인덱스, 값) | 특정 인덱스에 값을 삽입 | O(N) |
count() | 리스트명.count(값) | 리스트 안에서 파라미터로 넣은 값의 갯수를 셀 때 사용 | O(N) |
remove() | 리스트명.remove(값) | 리스트 안에서 파라미터로 넣은 값을 제거. 여러 개일 경우 하나만 제거됨 | O(N) |
튜플의 특징
"한 번 선언 된 값은 변경 할 수 없다."
튜플
자료형은 Graph 알고리즘
을 구현할 때 자주 사용된다. 다익스트라 알고리즘
같이 최단 경로 알고리즘에서 구현하는 우선순위 큐
에 들어가는 데이터를 튜플로 구성함.
람다 표현식
을 사용하면 함수를 간단하게 작성할 수 있다.
# 기존
def add(a,b)
return a+b
print(add(3,4))
# Lambda Expression
print(lambda a,b :a+b)(3,4))
### 튜플의 두 번 째 값을 기준으로 오름차순을 진행 하려면
array = [('악어',34),('하마',78),('오리',8)]
# 기존
def returnKey(x):
return x[1]
print(sorted(array,key=returnKey(array))
# Lambda Expression
print(sorted(array,key= lambda x : x[1])) # [('오리',8),('악어',34),('하마',78)]
여러개의 데이터를 받을 때 공백으로 구분할 경우
list(map(int,input().split()))
이처럼 map()
을 이용하여 받은 데이터들을 split()
으로 분리, int로 바꿔주고 난 후 list
로 형변환를 거쳐 입력을 받는다.
정해진 복수 개의 데이터를 받을 때
x,y,z = map(int,input().split())
정해진 갯수의 데이터를 받을 때에는 list
가 필요없이 받을 갯수 만큼 변수를 선언 후,
위 함수를 사용하면 메모리 공간도 덜 할당되는 효과가 있다.
연속적인 입력을 최대한 빠르게 받아야 하는 경우
sys.stdin.readline()
임력을 최대한 빠르게 받아야하는 정렬
, 이진탐색
, 최단경로
와 같은 문제들은 sys
라이브러리의 readline()
을 사용하면 된다.
다만, 한 줄 입력을 받고나서 rstrip() 함수를 같이 사용해야 한다.
readline()
으로 입력 후 엔터를 치면 엔터까지 입력이 되어서 이 공백문자를 제거하기 위함이다.
import sys
i = sys.stdin.readline.rstrip()
print(i)
data = list(map(int,input().split()))
과sys.stdin.readline.rstrip()
을 꼭 암기하자.