Skip to content

rilac1/coding-test-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

343 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๊ฐœ๋…๋“ค

์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด

์—ฌ๋Ÿฌ๊ฐœ์˜ ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•ด์•ผ ํ•  ๋•Œ์—๋Š” ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • 2๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ 2๋ถ€ํ„ฐ N๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ฉด์„œ ์•„๋ž˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋˜, ์ง€์›Œ์ง„ ์ˆ˜๋Š” ํŒจ์Šคํ•œ๋‹ค.
  • ์ง€์›Œ์ง€์ง€ ์•Š์€ ์ˆ˜๊ฐ€ ์†Œ์ˆ˜๋‹ค.

์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ

import statistics
arr = list()
mode = statistics.mode(arr)

๋ฐฑํŠธ๋ž˜ํ‚น

๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ๋•Œ์—๋Š” ์žฌ๊ท€ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•œ๋‹ค. (dfs)

๊นŠ์€๋ณต์‚ฌ

import copy
copy.deepcopy()

๋žŒ๋‹ค์‹์„ ํ™œ์šฉํ•œ ์•ŒํŒŒ๋ฒณ ์ŠคํŠธ๋ง ์ž…๋ ฅ๋ฐ›๊ธฐ

board = list(map(lambda x: ord(x)-65, input().rstrip()))

ABCDE -> [0, 1, 2, 3, 4]

2์ฐจ์› ๋ฐฐ์—ด ํ•œ ์ค„๋กœ ์ž…๋ ฅ๋ฐ›๊ธฐ

N, M = map(int, input().split())
graph = [list(map(int, list(input()))) for _ in range(N)]

List์—์„œ Heap ๊ฐ์ฒด ์ƒ์„ฑ

l = [4,3,5]
q = heapq.heapify(l)

RecursionError

์ตœ๋Œ€ ์žฌ๊ท€ ๊นŠ์ด ๊ฐ•์ œ๋กœ ๋Š˜๋ฆฌ๊ธฐ

import sys
sys.setrecursionlimit(100000)

SQL

์ง‘๊ณ„ํ•จ์ˆ˜(group by)๋ฅผ ์ด์šฉํ•œ ์กฐ๊ฑด๋น„๊ต where๋Œ€์‹  having ์‚ฌ์šฉ

My Library

Permutation (nPr)

visited = [False] * n
picked = []
def perm():
    global n,r
    if len(picked) == r:
        print(picked)
        return

    for i in range(len):
        if not visited[i]:
            picked.append(arr[i])  # ๋ณ€ํ™”
            visited[i] = True
            perm()                 # ์žฌ๊ท€ํ˜ธ์ถœ
            visited[i] = False
            picked.pop()           # ๋ณต์›

Combination (nCr)

# ์กฐํ•ฉ์˜ ๊ฒฝ์šฐ visited๊ฐ€ ํ•„์š”์—†์Œ
picked = []
def comb(left):
    global n,r
    if len(picked) == r:
        print(picked)
        return

    for i in range(left, n):        # left ~ n๊นŒ์ง€๋งŒ ํƒ์ƒ‰
        picked.append(arr[i])       # ๋ณ€ํ™”
        comb(i+1)                   # ์žฌ๊ท€ํ˜ธ์ถœ (๋งˆ์ง€๋ง‰์— ๋„ฃ์—ˆ๋˜ index๊ฐ€ left๊ฐ€ ๋œ๋‹ค.)
        picked.pop()                # ๋ณต์›

Dijkstra

import heapq
def dijkstra(start):
    distance = [1e9]*(N+1)
    distance[start] = 0
    h = [(0, start)]
    while h:
        dist, now = heapq.heappop(h)
        if dist==distance[now]:
            for target,d in graph[now]:
                if dist+d < distance[target]:
                    distance[target] = dist+d
                    heapq.heappush(h, (dist+d, target))
    return distance

Union_Find

def find(x):
    if x==parent[x]:
        return x
    parent[x] = find(parent[x])
    return parent[x]

def union(x,y):
    x = find(x)
    y = find(y)
    if x != y:
        parent[y] = x

Eratosthenes' sieve

def eratosthenes_sieve(N):
    prime = [True] * (N + 1)

    for i in range(2, int(N ** .5) + 1):
        if prime[i]:
            for j in range(i + i, N + 1, i):
                prime[j] = False
    
    return [i for i in range(2, N + 1) if prime[i]]

Topology Sort

from collections import deque
conditions = [[]]
degree = []

result = []
q = deque()
for i in range(N): 
    if degree[i]==0: deque.append(q, i)
while q:
    a = deque.popleft(q)
    result.append(a)
    for b in conditions[a]:
        degree[b] -= 1
        if degree[b]==0: deque.append(q, b)

Segment Tree

arr = []    # source array
tree = [0]*(4*N)

# initialize the tree
def init(start, end, node):
    if start==end: 
        tree[node] = arr[start]
        return tree[node]
    mid = (start+end)//2
    tree[node] = init(start,mid,node*2) + init(mid+1,end,node*2+1)
    return tree[node]

# sum of left~right
def t_sum(start, end, node):
    global left, right
    if start>right or end<left: return 0
    if start>=left and end<=right: return tree[node]
    mid = (start+end)//2
    return t_sum(start,mid,node*2) + t_sum(mid+1,end,node*2+1)

# change value
def update(start, end, node):
    global index, diff
    if start<=index<=end:
        tree[node] += diff
        if start!=end:
            mid = (start+end)//2
            update(start,mid,node*2)
            update(mid+1,end,node*2+1)

# main
init(0, N-1, 1)

left, right = a, b
print(t_sum(0, N-1, 1))

index, diff = i, x
update(0, N-1, 1)

index๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘์‹œ arr=[0]+[], init(1,N,1)

Binary Search

def bin_search(left, right):
    global target
    while l<=r:
        mid = (left+right)//2
        if target<arr[mid]:
            right = mid-1
        elif target>arr[mid]:
            left = mid+1
        else: return mid
    return -1

Upper Bound

def upper_bound(left, right):
    global target
    while l<=r:
        mid = (left+right)//2
        if target<arr[mid]:
            right = mid-1
        elif target>=arr[mid]:
            left = mid+1
    return right

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages