본문 바로가기
Python/알고리즘 필수지식

파이썬 알고리즘 팁 및 필수 지식

by 붕어사랑 티스토리 2022. 12. 8.
반응형

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 이렇게 하면 얕은복사로 인해 문제가 생긴다

관련 내용은 아래에 링크 참고

 

파이썬 다차원 배열 복사 시 주의사항

다차원 배열의 얕은 복사 >>> a = [[1,2],[3,4]] >>> b = a[:] >>> a [[1, 2], [3, 4]] >>> b [[1, 2], [3, 4]] >>> a[1][1] = 9 >>> a [[1, 2], [3, 9]] >>> b [[1, 2], [3, 9]] 위 케이스처럼 배열을 복사하면 얕은 복사가 일어난다. 문

lucky516.tistory.com

 

반응형

댓글