코딩테스트 준비를 위해 이곳저곳 어디저기 요기저기 궁시렁궁시렁 합쳐놓은 노트..
e다음에 오는 수는 10의 지수부( 유효숫자e지수 ex- 1e9 = 1,000,000,000), 주로 INF로 사용
소수점 반올림 컴퓨터 내부에서는 2진수로 작업해 실수 정보를 표현하는데 정확도 떨어짐
따라서 round(Argument,반올림하고자 하는 위치-1) 사용, 보통 5자리에서 반올림하여 같으면 인정
비어 있는 리스트 선언
a=list() 또는 a = []
1차원 리스트 초기화 a = [0] * size
리스트 초기화 방법 중 한가지.
array = [ i for i in range(20) if i % ==2 ] , =[ i*i for i in a if i in b ]
2차원 리스트 초기화
N by M 크기의 2차원 리스트 초기화
array=[ [0] m for _ in range(n) ] 2차원 리스트 초기화는 반드시 리스트 컴프리헨션을 사용해야함.
array=[ [0] m ] * n 이렇게 할 시 내무에 포함된 n개의 리스트가 동일한 객체의 레퍼런스로 인식함.
메서드명 | 사용법 | 설명 | 시간 복잡도 |
---|---|---|---|
append() | 변수명.append() | O(1) | |
sort() | 변수명.sort(reverse=True 면 내림차) | O(NlogN) | |
reverse() | 리스트의 원소의 순서를 뒤집음 | O(N) | |
insert() | 변수명.insert(인덱스,삽입할 값) | O(N) | |
count() | O(N) | ||
remove() | 변수명.remove(특정 값) | 특정값이 여러개면 한 개만 삭제한다. | O(N) |
pop() | 변수명.pop(인덱스) | 기본은 맨오른쪽이고 값을 리턴함. |
튜플은 한 번 선언된 값을 변경할 수 없다.
-> 그래프 알고리즘을 구현할 때 자주 사용된다.
-> 알고리즘을 잘못 작성하여 변경하면 안되는 값을 변경했는지 체크가 가능하다.
-> 일반적으로 각 원소의 성질이 서로 다를 때 주로 사용한다. ( 주로 다익스트라 최단 경로 (비용,노드번호) )
Key와 Value의 쌍을 데이터로 가지는 자료형. 인덱싱 불가
keys(), values(), items()
| : 합집합 &: 교집합 - : 차집합
add(), update(), remove() 등 사용 가능.
pass문
조건부 표현식(Conditional Expression)
#아래와 같은 식으로 사용 가능
score = 85
result = "Success" if score >=80 else "Fail"
print(result)
in 뒤에 오는 데이터에 포함되어 있는 모든 원소를 첫 번째 인덱스부터 차례대로 하나씩 방문한다.
in 뒤에 오는 데이터로는 리스트, 튜플, 문자열 등이 사용될 수 있다.
ex) for 변수 in 리스트:
continue문 : 반복문의 처음으로 돌아간다.
global 변수
- 함수 안에서 함수 밖의 변수 데이터를 변경하는 경우에 사용한다.
a = 0
def func():
global a
a += 1
for i in range(10):
func()
print(a)
10
filter,map,reduce에서 제일 많이 쓰임
nums = [1, 2, 3, 6, 8, 9, 10, 11]
list(filter(lambda x : x%2==0, nums)) #filter(함수,리스트)
map(lambda x : x**2, nums)
import sys
sys.stdin.readline().rstrip()
문자열과 수를 함께 출력하려면 더하기 연산자(+)만을 이용하면 오류가 발생한다.
-str(수) 처리 후 + 또는 ,를 이용한다.
f-string 문법
- 문자열 앞에 f를 붙임으로써 중괄호({ } ) 넣고 자료형의 변환 없이도 처리가능.
answer=7
print(f"정답은{answer}입니다.")
sorted 튜플 키값을 기준으로 정렬할 때 , sorted(객체, key=lambda x:x[1])
itertools
from itertools import permutations #또는 combinations
data = ['a', 'b', 'c']
result = list(permutations(data, 3))
#permutations,combinations는 클래스이므로 객체 초기화 이후에는 리스트 자료형을 변경해야 함
#중복순열
from itertools import product
result = list(product(data, repeat=2))
#결과 9개 3*3이니까
#중복조합
from itertools import combinations_with_replacement
result = list(combinations_with_replacement(data, 2))
#6개 , 3H2 인듯 !
#빈도계산
from collections import Counter
arr = [int(input()) for _ in range(10)]
val = Counter(arr).most_common()
[(30,3), (40,2), (10,1)] 처럼 0번쨰 인덱스는 arr의 숫자 1번째 인덱스는 arr에 등장 빈도
heapq
우선순위 큐를 구현하기 위해 사용, PriorityQueue 라이브러리보다 빠름.
파이썬에서 힙은 Min Heap이므로 O(NlogN)에 오름차순 정렬 가능.
import heapq
def heapsort(iterable):
h = []
resut = []
#모든 원소를 차례때로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
#힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
#결과는 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Maxheap은 제공하지 않아서 위의 방법에서 부호를 변경하는 방식을 사용.
힙의 원소를 삽입하기전 부호를 변경하고 힙에서 원소를 꺼낸 뒤에 다시 원소의 부호변경.
bisect
"""
정렬된 배열에서 특정 원소를 찾을 떄 효과적
bisect_left(a,x) : 정렬된 순서를 유지하면서서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾음
bisect_right(a,x) : 오른쪽
ex) [1,2,4,4,8] 에서 bisect_left(a,4) 실행시 2 반환, right는 4반환
이를 이용해 정렬된 리스트에서 특정 범위에 속하는 원소 개수를 찾을 때 효과적
"""
def count_by_value(a, left_value, right_value):
right_index = bisect_rigt(a, right_value)
left_index = bisect_left(a, left_value)
return right_index - left_index
collections
"""
리스트 자료형은 삽입,삭제에 O(N)이 걸리나 deque는 O(1)만에 해결
pop, popleft, append, appendleft 제공
Counter는 등장 횟수를 세준다.
"""
from collections import Counter
Counter(list).most_common() 하면 딕셔너리형태로 ('이름','빈도') 순으로 내림차순 정렬됨
.isalpha() : 해당문자가 영문자인지 아닌지 판별해줌
기본 형태 '구분자'.join(리스트)
'\n'.join(list) 하면 한줄씩 띄어쓰기한걸로 출력됨!
list = [1,2,3,1,2]
pos = [ i for i , x in enumerate(list) if x==찾는값 ]
4 10 20 30 40
3 7 5 12
3 125 15 25 와 같이 한 줄에 첫번째는 어레이에 들어갈 수의 개수 n이 주어지고 다음에는 n이 주어질 떄
N,*arr=map(int,input().split()) 처럼 arr 앞에 *을 붙이면 뒤이어 나오는 값이 arr에 배열로 저장됨
즉 N에는 4가 저장되고 arr에는 [10,20,30,40] 이 저장됨
배열을 연결해서 출력
".join() 함수사용 ex) ".join(map(str,arr))
arr=[1,2,3,4]에서 [과 ,를 빼고 출력하는 법
print(*arr) 하면 출력됨 ...
Utility 함수 구현
def v(*args):
return np.array(args)
위처럼 하면 *args에 몇 개 넣든 알아서 전송되어 매번 일일이 np.array같은 작업 안해도 됨
💡Tip : 한줄에 여러실행을 하고 싶을 때!
num1=10; num2=5 처럼 세미콜론 찍으면 됨
💡Tip : 코드가 너무 길어질 때 \를 치고 엔터를 누르면 한 줄로 인식!