이 게시물은 다음의 3개의 글을 읽고 공부를 위해 정리한 것입니다.
a, b = map(int, input().split())
(파이썬은 int, long, double 등을 고려할 필요 없이 그냥 입력받으면 된다)
from sys import stdin, stdout
input = stdin.readline
print = stdout.write
n = int(input())
print(str(n))
3 # 입력되는 숫자의 줄 수
1 2 3
4 5 6
7 8 9
# python은 함축해서 한 줄로 적을 수 있으므로 다음의 코드처럼 적는 건 C나 ++방식에 가깝다.
for i in range(int(input())):
arr = list(input())
data.append(arr)
# 한줄로 처리해보자. 파이썬을 파이썬답게!
data = [list(map(int, input().split())) for _ in range(int(input()))]
4 10 20 30 50 # 4개의 숫자 숫자1 숫자2 숫자3 숫자4
3 5 6 7
3 100 200 300
n, *data = map(int, input().split())
변수 앞에 *
을 붙이면 뒤에 나오는 값이 data
에 배열로 저장된다.
# 입력 데이터
3
AAAA
ABCA
AAAA
# 저장하고자 하는 형태
data = [['A', 'A', 'A', 'A']
['A', 'B', 'C', 'A']
['A', 'A', 'A', 'A']]
잘못된 코드 (단순히 이렇게 입력받게 되면 각 문자열이 하나의 데이터로 배열에 들어가버림)
arr = [input() for _ in range(N)]
올바른 코드
arr = [list(input()) for _ in range(N)]
list(input())
을 사용하면 입력받은 문자열을 글자별로 잘라서 저장을 해준다. split
써서 삽질하지 말자...!
arr = [1, 2, 3, 4]
를 1234
와 같이 공백없이 이어서 출력하고 싶을 때print("".join(map(str, arr)))
arr = [1, 2, 3, 4]
를 1 2 3 4
와 같이 공백을 기준으로 출력하고 싶을 때 ([
, ,
를 빼고 출력)*
를 붙여서 출력하면 된다.# 반복문을 사용해서 출력해도 OK
for num in arr:
print(num)
# 더 간단한 방법!!!
print(*arr)
N, M = map(int, input().split()) # N : 가로크기, M : 세로 크기
arr = [[0] * N for _ in range(M)]
reverse()
(주의 : 반환값X)list.count(찾는값)
str.count(찾는값)
set
자료형 사용하기data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'c', 'd' ]
data = list(set(data))
data = [[1,2], [1,2], [1]]
print(list(set(map(tuple, data))))
arr.sort()
arr.sort(reverse=True)
arr.sort(key=lambda x:(x[0], x[1]))
x[0]
기준으로 정렬하고, x[0]
값이 같다면 x[1]
을 기준으로 오름차순 정렬하는 코드-x[0]
배열을 돌며 최솟값을 저장하고 싶을 때 임의로 큰 값을 지정해야 하는 경우가 종종 있다. 그럴 때 직접 숫자를 지정해줘도 되지만 다음과 같이 파이썬의 라이브러리를 사용해서 지정할 수도 있다.
import sys
MAXVALUE = sys.maxsize
*주의할 점은 MAXVALUE여도 +1 연산 등은 가능하다. 파이썬은 아무리 큰 정수라도 범위 제한 없이 연산이 가능하기 때문에!
# 2진법
bin(27)
# 8진법
oct(27)
# 16진법
hex(27)
int()
에 숫자와 함께 두번째 인자로 진법 단위를 넘겨주면 된다.# 2진수 -> 10진수
int('0b111100', 2)
# 8진수 -> 10진수
int('0o74', 8)
# 16진수 -> 10진수
int('0x3c', 16)
문자열을 뒤집는 코드는 리스트 인덱싱을 사용하여 쉽게 구현할 수 있다.
data = "ABCD"
data[::-1]
ord()
chr()
[True 조건] if 조건 else [False 조건]
따라서 두 가지 방법 중 더 짧은 코드를 사용하자.
# 정석방법
if a > b:
res = a
else:
res = b
# 파이썬의 삼항연산자
res = a if a > b else b
combinations
의 첫 번째 인자에 배열을 넣고, 두 번째 인자에는 nCm
이라면 m
에 해당하는 값을 넣기from itertools import combinations
print(list(combinations([1, 2, 3, 4], 3)))
permutations
사용from itertools import permutations
N, M = map(int, input().split())
arr = [str(i+1) for i in range(N)]
for e in list(permutations(arr, M)):
print(" ".join(e))
코딩테스트에서 잘 출제되진 않으나 해당 기능을 제공하기는 한다.
from itertools import product
product([1,2,3,4] repeat=2)
위와 같이 repeat에 몇개를 뽑아 중복순열을 만들 것인지 넘겨주면 된다.
from itertools import combinations_with_replacement
데이터의 개수를 셀 때 유용한 클래스 Counter
별도 패키지 설치 없이 import해서 바로 사용이 가능하다.
from collections import Counter
Counter
생성자는 여러 형태의 데이터를 인자로 받을 수 있다.
print(Counter(["hi", "hey", "hi", "hi", "hello", "hey"]))
# Counter({'hi': 3, 'hey': 2, 'hello': 1})
print(Counter("hello world"))
# Counter({'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
Counter
를 dictionary
처럼 사용할 수 있다!Counter
클래스는 파이썬 기본 자료구조인 dictionary
를 확장하고 있으므로 해당 API를 모두 사용할 수 있다.
counter = Counter("hello world")
print(counter["o"], counter["l"]) #(2, 3)
counter["l"] += 1
counter["h"] -= 1
print(counter) # Counter({'h': 0, 'e': 1, 'l': 4, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
if "o" in counter:
print("o in counter")
del counter["o"]
if "o" not in counter:
print("o not in counter")
Counter
를 많이 쓰는 경우다. 가장 많이 나온 데이터나 가장 적게 나온 데이터를 쉽게 찾을 수 있게 해준다. Counter
클래스는 데이터의 개수가 많은 순으로 정렬된 배열을 리턴하는 most_common()
이라는 메서드를 제공한다.
from collections import Counter
print(Counter('hello world').most_common())
# [('l', 3), ('o', 2), ('h', 1), ('e', 1), (' ', 1), ('w', 1), ('r', 1), ('d', 1)]
메서드의 인자로 숫자 K를 넘기면 그 숫자만큼만 리턴하기 때문에, 가장 개수가 많은 K개의 데이터를 얻을 수도 있다.
from collections import Counter
print(Counter('hello world').most_common(1))
# [('l', 3)]
카운터 객체를 더하거나 빼서(+
, -
) 합치거나 제외할 수 있다.
최소힙을 사용해서 값을 저장하면 저장된 값 중 최솟값이 0번 인덱스(이진트리의 루트)에 위치한다.
import heapq
heap = []
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 10)
heapq.heappush(heap, 5)
heapq.heappush(heap, 8)
print(heap) # [1, 3, 10, 5, 8]
1 <--- Root
/ \
3 5
/ \ /
4 8 7
위와 같이 데이터가 저장되어 있다.
len()
heappop()
(pop되는 값 리턴)최소힙에 값을 넣을 때 음수로 넣고, 최종적으로 값을 출력할 때 한번 더 -1을 곱해줘서 원본 데이터를 출력하면 된다.
파이썬으로 스택 문제를 풀려면 deque를 사용해야 한다.
from collections import deque
deq = deque() # 덱 초기화
deq = deque([i for i in range(1, 5)]) #[1, 2, 3, 4] 저장
appendleft(value)
append(value)
popleft()
(pop된 값 리턴. 비어있는 경우 에러)pop()
(pop된 값 리턴. 비어있는 경우 에러)len
print()
(list처럼 출력. ex.[1,2,3,4]
형태)rotate(1)
(인자로 들어간 값만큼 시계방향 회전. -1처럼 음수인 경우 좌측(반시계방향)으로 회전)from queue import PriorityQueue
que = PriorityQueue()
put()
(append가 아니니 주의!)get()
(제거한 값 리턴)내 코드의 실행 시간을 체크하려면 다음과 같이 구현하면 된다.
import time
start_time = int(round(time.time() * 1000))
some_func()
end_time = int(round(time.time() * 1000))
print('some_func()의 실행 시간 : %d(ms)' % (end_time - start_time))
some_func()
가 실행 시간을 ms
단위로 출력해준다.