[Algorithm] 0. prepare

miori·2020년 10월 6일
0

algorithm-python

목록 보기
1/1

python은 가장 자신있는 언어다.
iOS 개발을 시작하기전에, 데이터 분석과 시각화에 관심이 많아서 주로 python으로 개발을 해왔기 때문이다.
python의 장점이라고 하면, 간결한 코드라고 하는데 무엇보다 손에 익숙해서 알고리즘 공부를 하는데 있어서 python을 선택했다.

prepare에서는 python으로 알고리즘을 짜는데 있어 알아두면 좋은 기본 꿀팁을 정리하려고 한다.

input (입력)

python의 경우 input() 함수의 동작속도가 느리기 때문에, sys 라이브러리에 정의 되어있는 sys.stdin.readline() 함수를 이용할 수 있다.

import sys
input = sys.stdin.readline

그래서 위와 같은 코드 처럼 먼저 정의해놓을 수 있다.
따라서 여기서 만약, 리스트 형식의 입력이라면,

arr = list(map(int,input().split()))

이런식으로 입력을 받을 수 있다.

혹은 이 뒤에 rstrip() 함수를 호출하여, 공백을 제거할 수 있다.
왜나하면 입력후 엔터키를 누르게 되면 줄 바꿈 기호가 입력 되므로, 이 공백문자를 제거하기 위해서다.

list

python의 list는 배열기능을 포함하고, 내부적으로 연결리스트 자료구조를 채택한다.
append(), remove()같은 매서드를 사용할 수 있다.

python으로 백준 문제를 풀다보면, list를 초기화 할 때가 많다.
그때 리스트 컴프리헨션 (list comprehension) 을 사용할 수 있다.

예시로, 만약 크기가 N X M 인 2차원 리스트를 초기화 할 때, 아래와 같이 코드를 작성할 수 있다.

arr = [[0] * m for _ in range(n)]

추가적으로 _(언더바)는 반복을 하되, 그 반복을 위한 변수값을 무시하고자 할 때 자주 사용한다.
본론으로 돌아와, 위의 코드를 뜯어보자면,

"n번 반복을 할껀데 이때 뭐를 반복할꺼냐면 [0]*m 을 반복할꺼야"

이렇게 이해할 수 있다.

이때 조심해야할 부분이 있다.
1차원 리스트를 [0]n 이렇게 초기화했다고,
2차원 리스트도 [[0]
m]*n이렇게 하게되면, 동일한 객체에 대한 레퍼런스로 인식이 되므로, 꼭 2차원의 경우는 리스트 컴프리헨션을 사용하는 것이 좋다.

profile
iS를 공부하는 miori 입니다.

0개의 댓글