코딩테스트

[Python] 코딩테스트를 위한 파이썬 문법 - 정리

영최 2023. 11. 27. 18:02
728x90

📌 리스트 관련 기타 메서드

- sort() : 변수명.sort(), 변수명.sort(reverse=True) , O(NlogN)

- reverse(): 변수명.reverse(), O(logN)
- insert(): 변수명(삽입할 위치 인덱스, 삽입할 값), O(N) -> 남용하면 시간초과

- remove():변수명.remove(특정값), O(N) -> 남용하면 시간초과

📌 문자열
- \" : 백슬래시를 앞에 사용하면 큰따옴표나 작을 따옴표를 문자열에 원하는 만큼 포함시킬 수 있다.

📌 튜플 

- 그래프 알고리즘 구현시 자주 사용됨 , 왜냐하면 한번 들어간 값이 바뀌지 않기 때문임 , 공간 효율적임

 

📌 사전자료형(dict())

- O(1) 리스트보다 빠름 

- keys(), values()

 

📌 집합 자료형

- 순서 X, 중복 X -> 인덱싱 X, O(1)

- 초기화 방법 

# 초기화 방법-1
data = set([1,1,2,3,4,4,5])
# 초기화 방법-2
data = {1,1,2,3,4,4,5}

 

- 합집합: a|b
- 교집합: a&b
- 차집합: a-b
- 추가: data.add(4)
- 여러개 추가: data.update([5,6])

📌 함수
- global: 함수 안에서 함수 밖의 변수 데이터를 변경할 때 사용.

해당함수에서 지역변수를 만들지 않고 함수 밖에 선언된 변수를 바로 참조하게됨 
- lambda: print((lambda a,b : a+b)(3,7)) -> 10 

📌 (삼성 불가) 입출력

import sys 
data = sys.stdin.readline().rstrip() -> rstrip은 줄바꿈기호 없애려고 

📌 eval()
: 문자열로 들어온 수학수식 계산결과 반환
eval("(3+5)*7") -> 56


📌 (삼성불가) itertools
- 순열: permutations

from itertools import permutations
data = ['A','B','C']
result = list(permutations(data,3))
print(result)


- 중복 순열: product

from itertools import product
data = ['A','B','C']
result = list(product(data, repeat=3)) #3개 뽑는 중복순열 구하기
print(result)


- 조합:combinations

from itertools import combinations
data = ['A','B','C']
result = list(combinations(data,2))
print(result)

 

- 중복 조합:combinations_with_replacement

from itertools import combinations_with_replacement
data = ['A','B','C']
result = list(combinations_with_replacement(data,3)) 
print(result)

 

📌 heapq
- priorityQueue 보다 heapq가 더 빠름 

- 최소힙으로 구현되있으므로 오름차순 정렬됨 O(NlogN)
- 힙정렬 예제(최소힙)

import heapq

def heapsort(iterable):
	h = []
    result = []
    #모든 원소를 차례대로 힙에 삽입
	for value in iterable:
    	heapq.heappush(h,value)
	#힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
	for _ in range(len(h)):
    	result.append(heapq.heappop(h))
    return result
    
result = heapsort([1,3,5,7,9,2,4,6,8,0])
print(result) #0,1,2,3,4,5,6,7,8,9

 

- 최대힙 구현

import heapq

def heapsort(iterable):
	h = []
    result = []
    #모든 원소를 차례로 힙에 삽입
    for value in iterable:
    	heapq.heappush(h,-value)
    #힙에 삽입된 모든 원소를 차례로 꺼내어 담기
    for _ in range(len(h)):
    	result.append(-heapq.heapppop(h))
    return result

result = heapsort([1,3,5,7,9,2,4,6,8,0])
print(result) #9,8,7,6,5,4,3,2,1,0

 

📌 bisect

- 이진탐색 구현

- 정렬된!! 배열에서 특정 원소 찾을 때 사용

- bisect_left(a,x): 정렬된 순서를 유지하면서 리스트에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드

- bisect_right(a,x): // 오른쪽

ex) 1 2 * 4 4 * 8 -> 순서대로 bisect_left(a,4), bisect_right(a,4)

- O(logN)

- 특정 범위에 속하는 데이터 개수 구하는 방법

from bisect import bisect_left, bisect_right

def count_by_range(a, left_value, right_value):
	left_index = bisect_left(a, left_value)
    right_index = bisect_right(a, right_value)
    return right_index-right_index

a = [1,2,3,3,3,3,4,4,8,9]

#값이 4인 데이터 개수 출력
print(count_by_range(a,4,4)) #2

#값이 [-1,3] 범위에 있는 데이터 개수 출력
print(count_by_range(a,-1,3)) #6

 

📌 collections - deque
- appendleft() O(1)

- append O(1)

- popleft() O(1)

- pop() O(1)

 

📌 collections - Counter

- 리스트 같은 이터러블 객체가 주어졌을 떄 등장횟수를 세줌

from collections import Counter

counter = Counter(['red','blue','red','green','blue','blue'])
print(counter['blue']) #3
print(dict(counter)) #사전 자료형으로 변환 ['red':2,'blue':3,'green':1]

 

 

📌 math 

- math.factorial(number)
- math.sqrt(number)
- math.gcd(21,14) : 최대 공약수 출력

728x90