Algorithm(53)
-
파이썬 hash (Python 해쉬)
hash 개념 Hash는 추가, 삭제, 검색을 거의 O(1)의 성능으로 수행할 수 있는 자료구조입니다. Array와 list의 특징을 합친 자료구조이며, 성능이 좋으면서도 구현이 단순합니다. collision 특정 key 값으로 value를 저장하게 되는데, 이 때 중복된 key가 존재할 수 있습니다. 이런 중복된 key가 존재하는 경우 collision이라고 하며 hash 자료구조에서는 이러한 collision을 해결하기 위한 두 가지 방법을 제공합니다. linear probing (open addressing) collision이 발생한 slot부터 linear하게 증가하며 empty slot을 찾는 방법입니다. 충돌 시 순차적으로 빈 곳을 찾게 되며 입력 자료의 2배 이상의 크기를 지니고 있어야 효..
2021.12.24 -
알고리즘 정의 (Algorithm)
1. 정의 알고리즘은 잘 정의된 계산적 절차를 의미합니다. 어떤 input을 받아서 어떤 값 등을 산출합니다. 즉, 알고리즘은 input을 output으로 바꾸는 계산 단계들을 의미합니다. 우리는 잘 정의된 계산 문제들을 해결하는데 사용하는 tool로서 알고리즘을 봐 왔습니다. 이런 문제들은 input과 output간의 관계를 잘 정의합니다. 간단히 말해 수학과 computer science등의 분야에서 문제를 해결하기 위한 일련의 잘차나 방법을 계산적 형태로 공식화 한 것이 바로 알고리즘 입니다. 2. 알고리즘의 예 예를들어 우리가 어떤 숫자들을 증가수열로서 정렬하고 싶다고 가정합시다. 이 문제는 실제적으로 많이 맞닥드리게 되는 문제이며, 다음과 같이 문제를 정의할 수 있습니다. input 숫자들의 배..
2021.12.23 -
Softeer: 수퍼바이러스
import sys K, P, N = map(int, sys.stdin.readline().split()) def dfs(exp): if exp in mem: return mem[exp] if exp == 1: return P%1000000007 part = exp//2 mem[exp] = (dfs(part)*dfs(part + exp%2))%1000000007 return mem[exp] mem = {} res = (K*dfs(N*10))%1000000007 print(res)
2021.10.21 -
Softeer: 복잡한 조립라인2
import collections import sys K, N = map(int, sys.stdin.readline().split()) grid = [] tran = [] for i in range(N - 1): line = list(map(int, sys.stdin.readline().split())) grid += line[:K], tran += line[K], line = list(map(int, sys.stdin.readline().split())) grid += line, for i in range(N - 1): mn = min(grid[i]) idx = grid[i].index(mn) for j in range(K): if j == idx: grid[i + 1][j] += mn else: gr..
2021.10.19 -
Softeer: 복잡한 조립라인1
import sys import collections K, N = map(int, sys.stdin.readline().split()) grid = [] tran = [] for i in range(N - 1): line = list(map(int, sys.stdin.readline().split())) grid += line[:K], pos = 0 tran_map = collections.defaultdict(int) for j in range(K): for k in range(K): if j == k: continue tran_map[(j, k)] = line[K + pos] pos += 1 tran += tran_map, line = list(map(int, sys.stdin.readline().s..
2021.10.19 -
Softeer: 로봇이 지나간 경로
import sys import collections H, W = map(int, sys.stdin.readline().split()) grid = [] num_cell = 0 for _ in range(H): line = list(sys.stdin.readline()) num_cell += line.count('#') grid += line, rows = len(grid) cols = len(grid[0]) start_pos = [] for y in range(rows): for x in range(cols): if grid[y][x] == '#': start_pos += (y, x), # 0: N, 1: S, 2: W, 3: E dirs = [(-1, 0), (1, 0), (0, -1), (0, 1)..
2021.10.15