반응형
1. input 빠르게 받기
import sys
n, m = map(int, sys.readline().split())
2. 문자 <-> 숫자 변환
chr 함수와 ord 함수를 이용한다
chr(65) # A
ord('A') # 65
3. List Comprehension 응용
keys = [ key for key, value in dict ]
values = [ value for key, value in dict ]
keysValues = [ (key,value) for key, value in dict]
map = [ [] for _ in range(n)] # 텅빈 2차원 배열
zeros = [0] * 10
>>> [ [i,i+1] for i in range(10)]
[[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9], [9, 10]]
4. zip 함수를 이용하여 dictionary 만들기
>>> keys = [ 'A', 'B', 'C' ]
>>> values = [ 1, 2, 3 ]
>>> dictionary = dict(zip(keys, values))
{'A': 1, 'B': 2, 'C': 3}
5. 2차원 배열 받기
data = []
for i in range(n):
data.append(list(map(int, sys.stdin.readline().split())))
#아래는 bfs와 같이 그래프에 사용될 때
edge = [ [] for _ in range(n+1)]
for _ in range(m):
n1, n2 = map(int, sys.stdin.readline().split())
edge[n1].append(n2)
edge[n2].append(n1)
6. 딕셔너리 update
딕셔너리 update는 두 딕셔너리의 합집합을 구할 때 사용할 수 있다. 혹은 collections의 ChainMap을 이용하자
>>> a = { 1: 'a', 2 : 'b' }
>>> b = { 2: 'c', 3 : 'd' }
>>> a.update(b)
>>> a
{ 1 : 'a', 2 : 'c', 3 : 'd' }
7. 함수가 기억이 안날 때
알고리즘 풀다가 테스트 환경에서 자동완성을 지원 안하고 함수를 까먹었을 때 dir을 사용하면 함수명을 볼 수 있다
print(dir(내부함수를 보고싶은 변수))
#예시
>>> dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
8. filter 사용
filter를 사용하면 리스트에서 원하는 값만 걸러낼 수 있으니 기억하자
>>> list(filter(lambda x: x > 0, [1, -2, 3, -4, -5, 6]))
[1, 3, 6]
9. 다차원 배열 생성
다차원 배열을 생성할때는 반드시 for _ in range() 를 이용해야 된다.
[ [0] * 10 ] *10 이렇게 하면 얕은복사로 인해 문제가 생긴다
관련 내용은 아래에 링크 참고
반응형
댓글