티스토리 뷰
파이썬은 학부 강의 때 이후 따로 잘 사용하지 않았던 언어였는데, 코드가 간결하고 내부적으로 지원해 주는 기능이 많아 알고리즘 언어로 파이썬을 선택했다.
알고리즘 문제를 풀면서 알게 된 유용한 문법들이 필요한 곳에서는 기억나지 않거나 아예 있는지도 몰라 사용하지 못할 때도 있고, 심지어 가끔은 기본 사용 문법도 헷갈려서 엄한 데 시간을 쏟기도 했다.
이런 문제를 해결하고자 이 포스팅은 알고리즘을 위한 파이썬 문법 정리 노트로 사용하려고 한다. 그렇기 때문에 앞으로 새롭게 알게 된 문법을 계속해서 업데이트 해 나갈 예정이다.
List 사용법
[기본 문법]
# 생성
a = list()
a = []
# 추가 & 삭제
a.append(3)
a.remove(3)
# 배열 뒤에 합치기
a.extend([5, 10, 7])
extend()는 반환 값이 없기 때문에 합친 배열 변수에 할당하기 위해서는 + 연산자를 사용한다.
a = [1, 2, 3] + [4, 5]
[2차원 배열 생성]
# 2차원 배열 초기화
temp_list = [[0]*width for _ in range(height)]
참고로, 여기서 아래와 같이 2차원 배열을 만들면 안 된다.
temp_list = [[0]*width] * height
만약 이 방법으로 3x3 배열을 생성했다면 아래와 같은 현상을 볼 수 있다.
temp_list = [[0]*3] * 3
temp_list[1][1] = 1
print(temp_list) # 결과: [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
[0, 0, 0]*3은 [0, 0, 0] 배열을 새로 생성하는 게 아니라 기존 배열의 주소를 복사해서 만드는 것이기 때문에 하나의 값만 바꿔도 같은 위치의 값이 모두 바뀌는 것처럼 동작한다.
[Stack으로 사용하기]
Python에서 List는 Stack으로도 사용할 수 있다.
# 생성
stack = []
# push
stack.append(1)
# pop
stack.pop()
# top
stack[-1]
# stack 안의 원소가 없을 때까지 반복하는 반복문
while stack:
# do something
while len(stack) > 0:
# do something
Dictionary 사용법
# 생성
temp_dict = {}
temp_dict = dict()
# 생성과 동시에 초기화
temp_dict = {"A": 1, "B": 6}
# 삽입, 수정
temp_dict["C"] = 7
temp_dict["C"] -= 3
# 사용
print(temp_dict["C"]) # OK
print(temp_dict["F"]) # ERROR!! 없는 key로 조회했기 때문.
[get()]
temp_dict.get(key)
# 있으면 value 반환, 없으면 None 반환
# 조건문에서 있으면 True, 없으면 False
temp_dict.get(key, default_value)
# 있으면 value 반환, 없으면 default_value 반환
(활용) "key" - "list value" dictionary 만들기
for e in lists:
temp_dict[key] = temp_dict.get(key, []) + [value]
[items()]
temp_dict.items() # (K, V) 튜플형태의 list 반환
# 활용 - value가 짝수인 key 리스트
keys_even_value = [k for k,v in temp_dict.items() if v%2 == 0]
(활용) value 값을 내림차순으로 정렬한 key list 만들기
answer = []
for item in sorted(temp_dict.items(), key=(lambda x: x[1]), reverse=True):
# item[0]은 튜플의 첫 번째 원소(여기서 key), item[1]은 튜플의 두 번째 원소(여기서 value)
answer.append(item[0])
sorted 파라미터의 key에 lambda x는 iterable 데이터 안의 각각의 아이템을 의미한다. 즉, x[1]은 여기서 튜플의 두 번째 원소를 가리키고 여기서는 value를 가지고 정렬한다는 의미가 된다.
[keys() 생략]
아래와 같이 temp_dict.keys()에서 .keys()를 생략해서 사용할 수 있다.
if key in temp_dict:
# do something
for key in temp_dict:
# do something
Queue 사용법
import queue
q = queue.Queue()
python에서 지원하는 Queue는 알고리즘에 사용하기 위한 목적으로 만들어진 자료구조가 아니다.
Queue의 멤버 함수를 보면 put_nowait(), get_nowait(), join()과 같이 스레드 관련 작업이 있는 걸 볼 수 있듯이 Queue는 스레드 관련 메시징 처리 등에서 사용하도록 만들어진 자료구조이다.
알고리즘 목적의 Queue는 collections.deque()를 이용해야 한다. Deque는 Stack과 메서드 이름이 비슷하기 때문에 쉽게 익힐 수 있다.
import collections as c
# 생성
queue = c.deque()
# push
queue.append(1)
# pop
queue.popleft()
# front
queue[0]
# back
queue[-1]
# queue 안의 원소가 없을 때까지 반복하는 반복문
while queue:
# do something
while len(queue) > 0:
# do something
기타
[VS Code에서 실행하는 방법]
python3 a.py
python 으로 하면 Python1 버전으로 실행되고 python3로 하면 Python3 버전으로 실행된다.
Python3에서 지원하는 문법이 Python1에서는 지원하지 않아 오류를 낼 수 있으니 주의!!
[VS Code 파이썬 주석 달기]
코드 맨 윗줄에 아래 코드를 넣어야 주석을 무시하고 실행한다.
# -*- coding: utf-8 -*-
[Input 처리]
# 각 변수에 대입
n, m = map(int, input().split())
# 1차원 배열 만들기
a = list(map(int,input().split()))
# 2차원 배열 만들기
a = [list(map(int, list(input()))) for _ in range(n)]
'Algorithm' 카테고리의 다른 글
프로그래머스 - 3xn 타일링 풀이 (python3) (0) | 2020.04.16 |
---|---|
프로그래머스 - 카드 게임 풀이 (python3) (0) | 2020.04.16 |
[알고리즘] BFS와 DFS을 구현해보자! (0) | 2020.04.08 |
- Total
- Today
- Yesterday
- pecs
- AndroidStudio
- SQLiteOpenHelper
- gson
- SOCKET
- RuntimeException
- 내용제공자
- SQL Server
- 프로그래머스
- Python
- kotlin
- MSSQL
- 부스트코스
- personal access token
- 알고리즘
- Android
- Java
- 위험권한
- DiffUtil
- Algorithm
- python3
- GitHub
- 파이썬
- SQLD
- AsyncListDiffer
- RecyclerView
- 안드로이드
- SQL
- covariance
- ViewHolder
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |