📌 리스트 관련 기타 메서드
- 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) : 최대 공약수 출력
'코딩테스트' 카테고리의 다른 글
[그리디] 백준 13164 Gold5 행복유치원 (0) | 2024.01.09 |
---|---|
[그리디] 백준 11000 Gold5 강의실 배정 (0) | 2024.01.05 |
[이진탐색] 프로그래머스 Lv4 가사 검색 (1) | 2023.12.07 |
[구현] 프로그래머스 Lv3 외벽 점검 (0) | 2023.11.29 |
프로그래머스, 백준 깃허브 연동하기 및 빨간 체크박스 문제 (0) | 2023.03.11 |