[Python] 코딩테스트용 문법 .feat 이것이 코딩테스트다.

mDev·2022년 1월 7일
0
post-thumbnail

서론 ✏️

그동안 웹개발공부에 치중해서 코딩테스트를 위한 공부에 대해 소홀히 한 부분이 있다. 따라서 2022년 코딩테스트들을 대비하기 위해 Python에서 자주 쓰이는 syntax나 내가 몰랐던 부분을 이곳에 정리하려고 한다..

강의는 동빈 나님의 이것이 취업을 위한 코딩테스트이다 2021 을 보면서 공부 중이다. 주변 지인의 추천으로 듣고 있는데 정말 좋은 강의 인것 같다. 코테를 준비하고 있는 분이라면 들으면 도움이 많이 될 것 같다 👍

이것이 취업을 위한 코딩테스트 강의: https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC


📌 리스트 컴프리헨션(List Comprehension)

리스트 컴프리헨션은 리스트를 초기화하는 방법 중 하나이다. 리스트 컴프리헨션을 사용하면:

  • 선언& 값 할당을 한 줄 안에 할 수 있음.
  • 리스트 선언 시 조건문을 추가해 해당하는 원소만 할당할 수 있음
### 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 알고리즘을 구현할 때 자주 사용된다. 다익스트라 알고리즘같이 최단 경로 알고리즘에서 구현하는 우선순위 큐에 들어가는 데이터를 튜플로 구성함.

📌 람다 표현식(Lambda Expression)

람다 표현식 을 사용하면 함수를 간단하게 작성할 수 있다.

# 기존
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() 을 꼭 암기하자.

profile
Homo proponit, sed Deus disponit.

0개의 댓글