코딩 테스트에서 유용한 파이썬 코드 정리

728x90

코딩 테스트에서 유용한 파이썬 스킬들

코딩 테스트에서 파이썬은 간결한 문법과 다양한 라이브러리 지원으로 많은 인기를 얻고 있다. 아래는 코딩 테스트에서 자주 활용되는 파이썬 스킬들을 정리한 것이다. 이를 익히고 연습한다면 문제 풀이 속도와 정확도를 높일 수 있다.


1. 기본 입출력

  • input()print()를 활용해 데이터를 주고받는다.
  • 여러 줄 입력을 받을 경우 sys.stdin.readline()을 사용하는 것이 더 빠르다.
import sys
input = sys.stdin.readline
n = int(input())  # 정수 입력
arr = list(map(int, input().split()))  # 공백 구분 여러 값 입력

2. 리스트 컴프리헨션

  • 한 줄로 리스트를 생성하거나 변환할 수 있다.
  • 조건을 추가해 필터링도 가능하다.
# 기본 사용법
squared = [x**2 for x in range(10)]

# 조건 추가
evens = [x for x in range(10) if x % 2 == 0]

3. 람다와 정렬

  • 람다를 사용해 간단한 함수를 만들고, 이를 정렬 기준으로 활용할 수 있다.
  • sorted()나 리스트의 .sort() 메서드에서 유용하다.
# 정렬 기준 변경
arr = [(1, 3), (2, 2), (3, 1)]
arr.sort(key=lambda x: x[1])  # 두 번째 요소 기준으로 정렬

4. 컬렉션 모듈 활용

  • collections 모듈의 Counter, defaultdict, deque 등은 문제 해결을 간단하게 해준다.
from collections import Counter, defaultdict, deque

# Counter
freq = Counter([1, 2, 2, 3, 3, 3])  # 각 요소의 빈도 계산

# defaultdict
graph = defaultdict(list)
graph[1].append(2)

# deque
queue = deque([1, 2, 3])
queue.append(4)  # 큐의 오른쪽에 추가
queue.popleft()  # 큐의 왼쪽에서 제거

5. 힙큐 (Heapq)

  • 우선순위 큐를 구현할 때 사용된다.
  • 기본적으로 최소 힙을 제공하며, 최대 힙은 음수값을 활용한다.
import heapq

# 최소 힙
heap = []
heapq.heappush(heap, 3)
heapq.heappush(heap, 1)
heapq.heappush(heap, 2)
smallest = heapq.heappop(heap)  # 1

# 최대 힙
heapq.heappush(heap, -3)
largest = -heapq.heappop(heap)  # 3

6. 이진 탐색 (Bisect)

  • 정렬된 리스트에서 특정 값을 효율적으로 삽입하거나 찾을 때 유용하다.
from bisect import bisect_left, bisect_right

arr = [1, 2, 4, 4, 8]

# 특정 값의 위치 찾기
pos = bisect_left(arr, 4)  # 4가 시작되는 인덱스
right_pos = bisect_right(arr, 4)  # 4가 끝나는 인덱스

7. 유니온 파인드

  • 서로소 집합(Disjoint Set)을 구현할 때 사용된다.
  • 연결성 문제를 해결할 때 매우 유용하다.
def find(parent, x):
    if parent[x] != x:
        parent[x] = find(parent, parent[x])  # 경로 압축
    return parent[x]

def union(parent, a, b):
    root_a = find(parent, a)
    root_b = find(parent, b)
    if root_a < root_b:
        parent[root_b] = root_a
    else:
        parent[root_a] = root_b

# 초기화
n = 5
parent = [i for i in range(n + 1)]

# 합집합 연산
union(parent, 1, 2)
union(parent, 2, 3)

# 연결 확인
print(find(parent, 1) == find(parent, 3))  # True

8. 조합과 순열

  • itertools 모듈의 combinationspermutations를 활용해 간단히 조합과 순열을 구할 수 있다.
from itertools import combinations, permutations

# 조합
comb = list(combinations([1, 2, 3], 2))  # [(1, 2), (1, 3), (2, 3)]

# 순열
perm = list(permutations([1, 2, 3], 2))  # [(1, 2), (1, 3), (2, 1), ...]

9. 데이터 변환과 처리

  • map()zip()은 데이터를 효율적으로 변환하거나 묶을 때 유용하다.
# map을 활용한 변환
numbers = list(map(int, "1 2 3 4".split()))

# zip을 활용한 묶기
keys = ['name', 'age']
values = ['Alice', 25]
data = dict(zip(keys, values))

10. 기타 유용한 팁

  • 리스트에서 최댓값과 최솟값의 인덱스를 찾을 때는 enumerate()를 사용한다.
arr = [10, 20, 30]
max_idx = max(enumerate(arr), key=lambda x: x[1])[0]  # 2

이 외에도 파이썬은 다양한 내장 함수와 라이브러리를 제공하므로 문제 해결에 필요한 도구를 적재적소에 활용하는 연습이 중요하다. 코딩 테스트에서는 정확성과 속도를 모두 고려해야 하므로, 위의 스킬들을 반복적으로 연습하여 익숙해지도록 한다.

728x90

'CodingTest' 카테고리의 다른 글

[이것이 코딩테스트다] 미래도시 - Python  (0) 2025.01.12