str.zfill(n)
과 같이 사용하며, str이 n 길이 만큼 0으로 채워줌(왼쪽)str.rjust(n,'0')
과 같이 사용하며, rjust는 왼쪽, ljust는 오른쪽에 특정 문자를 str의 길이가 n이 되도록 채워줌str.replace('.','',1)
이런식으로 세번째 인자로 해당 문자를 replace할 횟수를 지정할 수 있다.str.capitalize()
과 같이 사용하며, 맨 첫번째 문자를 대문자로 변환해 반환str.title()
과 같이 사용하며, 숫자/특수문자/공백으로 구분된 각 단어의 첫 문자를 대문자로 변환해 반환.str.split(' ')
과 같이 공백으로 문자열을 split 했을 때, 공백이 두 번 연속되는 경우 ''가 두 공백 사이 문자로써 split된다.del arr[1]
과 같이 사용함arr.pop(1)
과 같이 사용arr.pop()
과 같이 쓴다면, 마지막 원소를 반환 후 제거pop(0)
은 O(n)임을 인지하고 있을 것!arr.remove(x)
와 같이 제거할 값을 인자로 사용.for i in range(1, num**(0.5)+1)
의 범위에서 나머지 연산이 0인지 확인하고, 그 값이 제곱수만 아니라면 i와 num//i를 약수로 추가하면 됨.isdigit()
combinations(list, n)
과 같이 사용해, list에서 n개의 원소를 갖는 조합을 뽑을 수 있다.permutations(list, n)
과 같이 사용해, list에서 n개의 원소를 갖는 순열을 뽑을 수 있다.product(*a)
와 같이 사용해, 이중 리스트인 a에서 조합들을 구할 수 있음product('AEIOU', repeat=i)
와 같이 repeat 인자를 사용해 같은 리스트/문자열/집합의 조합들을 구할 수도 있음comb(a,b)
와 같이 사용해 aCb를 구할 수 있다.pop(0)
을 하면 빅오가 O(n)이지만 popleft()
는 빅오가 O(1)이다.key=lambda x: x[0]
과 같이 정렬 조건을 지정해줄 수 있는데, 여러 개의 조건을 사용하고싶을 경우, key=lambda x: (x[0],x)
와 같이 정렬 조건을 괄호로 묶어 전달하면 된다.key=lambda x: (-x[0],x)
와 같이 -
를 사용하면 해당 조건에 대해선 내림차순으로 정렬할 수 있다.bin(de1|de2)
와 같이 사용하면, 십진수인 de1과 de2를 이진수로 변환 후 or 연산을 한 이진수 값을 반환받을 수 있다.dict(zip(arr1, arr2))
해서 두 리스트를 하나의 딕셔너리로 만들 수 있다.dictionary.get(name, 0)
과 같이 get을 써서 value를 가져올 때, key가 없는 경우 오류가 나는 것을 막을 수 있다.for문에서 break로 빠져나오지 않고 끝까지 실행되었다면 else문이 실행된다!
for i in range(2,num+1):
if num%i==0:
break
else:
cnt+=1
이런식으로 나의 경우엔 소수인지 아닌지 판별할 때 사용했다!
while에서도 동일하게 while-else문을 사용할 수 있다.
==
if 8<n<10
과 같이 양쪽에 부등호를 동시에 사용할 수 있다..! 왜 까먹고있었지len(my_list)==0
not my_list
-> 리스트가 비어있으면 True를 반환 def gcd(a,b):
while b!=0:
a,b = b, a%b
return a
a*b/gcd(a,b)
가 a와 b의 최소 공배수이다.for column in zip(*arr)
와 같이 사용 가능all(iterable)
: iterable 자료형에서 모든 값이 True라면 True를 반환any(iterable)
: iterable 자료형 중 하나라도 True 값을 가지면 True를 반환any([i>max_value for i in list])
-> list를 돌며 하나의 값이라도 max_value보다 크다면 True를 반환## 변환하고싶은 수
num = 18
## 변환하고싶은 진수
n = 16
result = ''
while num>0:
num, div = num//n, num%n
result+=str(div)
print(result[::-1])
n진수로 변환하고싶을 때, 위와 같이 몫과 나머지를 이용해서 진수 변환이 가능하다.
이 문제에서 사용했다.
진수 변환이 주 task가 아닌 경우, 2진수 <-> 10진수는 아래와 같이 함수를 사용할 수 있음
from heapq import heapify, heappush, heappop
num = [1,2,5,2,5,6,8]
## list to heap
heapify(num)
heappush(num, 4)
## 최소값 pop
heappop(num)
## 최소값 단순 확인
print(num[0])
노드의 삽입과 삭제의 빅오가 O(logN)이다! 여기서 logN은 힙(완전이진트리)의 높이에 해당
최대값, 최소값 연산 및 데이터 삽입 및 삭제 시 유용하게 사용될 것 같다.
re.split(pattern, string)
: 패턴에 따라 문자열을 분리하여 리스트로 반환re.findall(pattern, string)
: 패턴에 매칭되는 모든 부분을 찾아 리스트로 반환예제)
파일명 정렬
sorted(files, key=lambda file : (re.split('\d+', file.lower())[0],int(re.findall('\d+', file)[0])))
/d
는 숫자(0-9)를 의미+
는 하나 이상의 숫자에 매칭/d+
대신 /D+
를 사용하면 된다.making odd character -> 공백을 다루는 방법
시저암호 -> 아스키코드 활용
모의고사 -> 같은 리스트를 뺑글뺑글 돌아야할 때, 인덱스에 % 연산을 사용하자
실패율 -> 나누기 연산할 때, 분모가 0이 되지 않도록! (런타임 에러)
햄버거 만들기 -> 슬라이싱과 pop 사용에서 성능 차이가 크게 남. 주의할 것
arr = arr[:-4]
(O(4))와 for _ in range(4): arr.pop()
(O(1))의 차이달리기 경주 -> 리스트와 dictionary 둘을 모두 이용해 문제를 풀어야함 (딕셔너리가 index 용도로 사용됨)
n^2 배열 자르기 - 아이디어로 풀어야하는 문제
의상 - 조합을 사용하면 너무나 쉽게 풀 수 있는 문제 (경우의 수를 생각)
전화번호 목록 - 문자열의 특성을 이해하면 쉽게 풀 수 있는 문제 (sort!)