코딩테스트에서 사용하는 파이썬 테크닉 모음

알고리즘 문제를 풀 때 사용하는 기본적인 파이썬 코드 조각들을 모아 두었습니다. 써놓고도 주기적으로 까먹을 예정이지만요.

# 입력, 출력

파일에서 입력받기

# input.txt 안에 입력값 저장
import sys
sys.stdin = open("input.txt", 'r')
string = input()

숫자 입력 나눠서 받기

# 6 3
N, M = map(int, input().split())

숫자 입력 한꺼번에 받기

# 2 3 5 7 9 11
nums = list(map(int, input().split())

2차원 배열 받기

'''
9 8 3 1
5 2 4 7
2 3 5 6
5 2 3 4
'''
maze = [list(map(int, input().split())) for _ in range(4)]

포맷팅 출력하기

result = 10
print(f"result is {result}")    # 'result is 10'

2차원 배열 예쁘게 출력하기

arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(*arr, sep='\n')
'''
1 2 3
4 5 6
7 8 9
'''

# 자료구조

from collections import deque
q = deque()
q.append(2)
print(q.popleft())  # 2

최소 힙

import heapq
q = []
heapq.heappush(q, (1, 'apple'))
print(heapq.heappop(q)[1])    # 'apple'

유틸리티 함수

문자를 ASCII로 변환

print(ord('a'))    # 97

순열과 조합

배열로 순열 생성

from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3))
print(result)   # [('A', 'B', 'C'), ('A', 'C', 'B'), ..., ('C', 'B', 'A')]

배열로 조합 생성

from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2))
print(result)   # [('A', 'B'), ('A', 'C'), ('B', 'C')]

배열로 중복 순열 생성

from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2))
print(result)   # [('A', 'A'), ('A', 'B'), ..., ('C', 'C')]

# 기타 테크닉

list comprehension을 사용한 리스트 값 필터링

arr = [7, 1, 2, 5, 4, 2, 0]
pivot = 3
left_side = [x for x in arr if x <= pivot]
print(left_side)    # [1, 2, 2, 0]

튜플 리스트 정렬

arr = [('apple', 17), ('banana', 8), ('candy', 3)]
arr.sort(key=lambda x: x[1])
print(arr)    # [('candy', 3), ('banana', 8), ('apple', 17)]

for 반복문 인덱스 가져오기

arr = ['a', 'b', 'c']
for i, char in enumerate(arr):
    print(f'{i}: {char} ', end='')   # 0: a 1: b 2: c 

두 배열 tuple로 묶기

numbers = [1, 2, 3]
letters = ["A", "B", "C"]
for pair in zip(numbers, letters):
    print(pair, end='')     # (1, 'A')(2, 'B')(3, 'C')

이진 탐색

from bisect import bisect_left, bisect_right
numbers = [1, 4, 6, 8, 11, 19]
target = 11
print(bisect_left(numbers, target))     # 4
print(bisect_right(numbers, target))     # 5

© 2023 by Esot3riA. All Page content is property of Esot3riA.

Powered by Hydejack v8.1.1