파이썬을 이용한 코딩테스트에서 유용한 팁

2차원 배열 선언

1
2
3
4
5
6
7
def double_array(M, N):
    graph = [[0] * N for _ in range(M)]
    return graph

visited= double_array(4,4)
visited[0][0]=1
print(visited)

출력

[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]


특정 값이 포함되지 않은 값만을 저장

1
2
3
4
5
6
def remove_value(a, remove_set):
    result = [i for i in a if i not in remove_set]
    return result

result = remove_value([1, 2, 3, 4, 5, 5], {3, 5})
print(result)

출력

[1, 2, 4]


문자열을 수식으로

1
print(eval("(3 + 6) * 6"))

출력

54


정렬된 배열에서 특정한 원소 값을 넣을 인덱스 찾기

1
2
3
4
from bisect import bisect_left, bisect_right

print(bisect_left([10, 20, 30, 40, 80], 25))  # 2
print(bisect_right([10, 20, 30, 40, 80], 40)) # 4

배열은 정렬이 되있어야한다

left, right는 특정한 원소값을 추가할때 비교원자의 왼쪽에 넣을지, 오른쪽에 넣을지를 정합니다

1
2
print(bisect_left([1, 2, 3, 3, 5], 3)) # 2
print(bisect_right([1, 2, 3, 3, 5], 3)) # 4

bisect응용: 정렬된 배열에서 값이 특정 범위에 속하는 원소의 개수

1
2
3
4
5
6
7
8
9
def count_by_range(a, left_value, right_value):
    right_index = bisect_right(a, right_value)
    left_index = bisect_left(a, left_value)
    return right_index - left_index

# 값이 4인 데이터 개수 출력
print(count_by_range([1, 2, 3, 3, 3, 3, 4, 4, 8, 9], 4, 4)) # 2
# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range([1, 2, 3, 3, 3, 3, 4, 4, 8, 9], -1, 3)) # 6

구간 합 계산

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def sum_index(n, data):
    # 접두사 합(Prefix Sum) 배열 계산
    sum_value = 0
    prefix_sum = [0]
    for i in data:
        sum_value += i
        prefix_sum.append(sum_value)

    # 구간 합 계산(세 번째부터 네 번째 수까지)
    left = 3
    right = 4
    return prefix_sum[right] - prefix_sum[left - 1]

print(sum_index(5, [10, 20, 30, 40, 50]))

출력

70

댓글 쓰기