넘치게 채우기
[Python] 파이썬 코테의 기술 본문
입출력
import sys
sys.stdin.readline() # 한줄 전체 입력받기. input()보다 빠르게 입력받을 수 있다. 개행문자 \n도 딸려오니 주의.
a, b, c = map(int, sys.stdin.readline().split()) # a, b, c에 각각 넣기
형변환
int(x) # int로 변환
str(x) # 문자열로 변환
float(x) # 실수 타입 변환
chr(x) # 문자로 변환
bool(x) # 참/거짓값으며 변환(0이나 null이 아닌경우 모두 True)
수학
1e9 = 10^9
2e9 = 2 * 1e9 (INT_MAX에 거의 근접한 값이다)
1e9 + 7 # 보통 온라인 저지 사이트나 알고리즘 대회에서 값이 너무 커질 때, 오버플로우를 막기 위해서 1e9 + 7로 나누라고 한다.
쓰이는 이유:
1. int 안에 들어오는 큰소수 : 소수여서 모듈러 연산의 값의 중복이 잘 없어 정확한 문제풀이가 가능하다.
2. 쉬운 표기 : 간편한 표기의 큰 소수여서 기억하기 쉽다.
3. 모듈러 곱셈 역원 : 페르마 소정리로 역원을 불러오기 좋은 수이다.
abs(x) # 절댓값
round(x) # 반올림
import math
math.pi # 파이
math.e #오일러 수
math.pow(x, y) # x의 y승
math.sqrt(x) # x의 제곱근
math.ceil(x) # 올림
math.floor(x) # 내림
math.fabs(x) # 절댓값
math.factorial(x) # 팩토리얼 x(x!)
math.gcd(a, b) # a와 b의 최대공약수
math.lcm (a, b) # a와 b의 최소공배수
import random
random.random() # 0에서 1까지의 값 반환
random.randrage(1, 7) # 범위 지정 랜덤반환
큐, 스택, 덱 자료구조
from collections import deque
d = deque() # 덱 생성 및 초기화
d.append(x) # 덱 뒤에 x 추가
d.appendleft(x) # 덱 앞에 x 추가
d.insert(i, x) # 덱의 i 인덱스에 x 추가
d.pop() # 덱 뒤의 값 제거(값을 리턴받을 수 있다 : x = d.pop())
d.popleft() # 덱 앞의 값 제거
heap = [] # 힙 선언
heapq.heappush(heap, x) # 힙에 x 추가
heapq.heappop(heap) # 힙에서 값 제거
heapq.heapify(list) # 리스트를 힙으로 만들기 (O(n))
기본적으로 최소 힙이기 때문에, 최대 힙으로 사용하고 싶다면, 음수를 붙이거나, 튜플로 감싸는 방법 등이 있다
리스트와 튜플
list = [] #리스트 선언
list.append(x) # 리스트 뒤에 x 추가
list.sort() # 리스트 정렬(O(n log n))
list.reverse() # 리스트 뒤집기
list.insert(a, b) # a 인덱스에 b 추가
list.remove(x) # 가장 앞에 있는 x 제거
list.pop() # 리스트 맨 뒤값 제거
list.count(x) # 리스트에 x의 개수 반환
list.extend(x) # 리스트에 리스트 x 붙이기
list[a:b] # 리스트의 a인덱스부터 b인덱스 전까지
list[:2] # 리스트의 처음부터 2인덱스 전까지 자르기
list[2:] #리스트의 2인덱스부터 끝까지 자르기
a + b# 리스트 a에 b 더하기
list * 3 # 리스트 3번 반복
table = [[0] * m for _ in range(n)] m * n의 [0] 생성 및 초기화
문자열 처리
word = "" # 문자열 선언
word + 'a' # 문자열 뒤에 a 추가
word = 'a' + word # 문자열 앞에 추가
word[a:b] # 문자열의 a인덱스부터 b인덱스 전까지
word[:2] # 문자열의 처음부터 2인덱스 전까지 자르기
word[2:] #문자열의 2인덱스부터 끝까지 자르기
word.count('b') #문자 b의 개수 세기
word.find('b') # 문자 b의 처음으로 나오는 위치 찾기. index()와는 다르게 없으면 -1을 반환한다.
word.index('b') # 문자 b의 처음으로 나오는 위치 찾기 find()와는 다르게 없으면 오류 발생
word.upper() # 소문자를 대문자로 변환(전체)
word.lower() # 대문자를 소문자로 변환
word.lstrip() # 왼쪽 공백 제거
word.rstrip() # 오른쪽 공백 제거
word.strip() # 양쪽 공백 제거
word.replace(바뀔 문자열, 바꿀 문자열) # 문자열 치환
word.split() # 기본으로 공백 및 tab, enter 를 기준으로 분할. 파라미터에 구분할 기준을 넣을 수 있다.
word.isalnum() # 문자열 또는 숫자로만 이루어져있는지 불리언 값
word.isalpha() # 문자열로만 이루어져있는지
집합과 딕셔너리
s = set()
s1 & s2 # 교집합. s1.intersection(s2)와 같다.
s1 | s2 # 합집합. s1.union(s2)와 같다.
s1 - s2 # 차집합. s1.difference(s2)와 같다.
s.add(값) # 집합에 값 추가
s.update([1, 2, 4]) # 집합에 여러 값 추가
s.remove(1) # 특정 값 제거
dict = {} # 딕셔너리 생성
dict[apple] = 3 # key에 value 추가
if apple in dict: #값이 있는지 확인
'PS > 언어별 스킬모음' 카테고리의 다른 글
[C++] unordered_map(or set)의 key로 기본 자료형이 아닌 다른 자료형 사용하기(vector, pair 등) (0) | 2023.09.08 |
---|---|
[C++] 람다 함수 (0) | 2023.09.06 |
[Java] 자바 코테의 기술 (0) | 2023.08.25 |
[C++] PS에서 속도 빠르게 하는 팁 (0) | 2023.07.25 |
[C++] PS에 많이 쓰이는 라이브러리 및 기본 스킬들 (0) | 2023.05.08 |