Lv3.(깊이/너비 우선 탐색) 단어 변환 - Python
·
코딩 테스트/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 과거 작성 코드 : import collections def solution(begin, target, words): def check_can_go(str1,str2): count = 0 for i in range(len(str1)): if str1[i] == str2[i]: count += 1 if count == (len(str1)-1): return True else : return Fals..
Lv2.(깊이/너비 우선 탐색) 게임 맵 최단거리 - Python
·
코딩 테스트/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 거리를 카운트하는것은 BFS를 사용하면 된다. 카카오 기출문제도 비슷한 문제가 있다. 참고 : https://school.programmers.co.kr/learn/courses/30/lessons/60063 첫 제출:import collectionsdef solution(maps): # 상 하 좌 우 dx = [ 0,0,-1, 1] dy = [-1,1, 0, 0] ..
Ch10.그래프 이론 - 커리큘럼
·
코딩 테스트/이취코테
[ 접근 방법 ] 딱 보았을때 위상정렬 알고리즘을 구현해서 풀이하면 되는것으로 보인다. 10강에서 제일 어려웠던 문제이다. 그냥 단순하게 이 문제가 어려운게아닌, 나에게 있어 위상 정렬이 조금 구현이 어색한것 같다. [ 작성 코드 ] from collections import deque n = int(input()) # 수업 걸리는 시간 data = [0] * (n+1) task = [0] * (n+1) # 들어오는 차수 indegree = [0] * (n+1) #그래프 graph = [[] for _ in range(n+1)] for i in range(1,n+1): indata = list(map(int,input().split())) data[i] = indata[0] for x in indata[..
Ch10.그래프 이론 - 도시 분할 계획
·
코딩 테스트/이취코테
[ 접근 방법 ] 최소 신장 트리를 통해 알고리즘을 구현한다. 단 여기서, 2개의 최소 신장 트리를 구현하는데 한개의 최소신장트리를 크루스칼 알고리즘을 통해 구현하고 제일 큰 간선을 제거하여 두개의 최소 신장 트리를 구현하면 된다. [ 작성 코드 ] def find_parent(parent, x): if x != parent[x]: parent[x] = find_parent(parent, parent[x]) return parent[x] def union_parent(parent, a, b): a = find_parent(parent,a) b = find_parent(parent,b) if a < b: parent[b] = a else: parent[a] = b n , m = map(int , input..
Ch10.그래프 이론 - 팀 결성
·
코딩 테스트/이취코테
[ 접근 방법 ] 전형적인 서로소 집합 알고리즘 문제이다. 9강, 10강 부터는 이론을 암기하고 코드로 구현하는 연습이 필요한 것으로 보인다. [ 작성 코드 ] def find_parent(parent, x): if parent[x] != x: parent[x] = find_parent(parent, parent[x]) return parent[x] def union(parent,a,b): a = find_parent(parent,a) b = find_parent(parent,b) if a < b : parent[a] = b else: parent[b] = a n , m = map(int,input().split()) parent = [ i for i in range(n+1) ] for _ in rang..
[ 데이터 베이스 ] Consistent Hashing에 대해서 설명해 보세요.
·
공부 정리/면접 준비
Hash Ring을 사용해서 해싱을 하는 방법입니다. 메타정보 조회 없이 클러스터에서 키가 저장된 노드를 바로 찾아갈 수 있습니다. Rebalancing문제를 해결하기 위한 방법입니다. Virtual Node는, 실제 물리 노드보다 토큰을 더 많이 보유하는 방식입니다. 이를 통해, Object분포의 불균일성을 해결합니다. 일반 HashTable을 사용하면, 분산 DB에서 node를 추가하거나 삭제하는데 O(K)의 시간이 걸립니다. (K는 Key의 수) Coninstent Hashing을 사용하면 O(K/N)의 시간으로 가능합니다. 단, Key를 추가하거나 삭제할 때, 일반적인 HashTable은 O(1)이면 가능하지만, Consistent Hashing의 경우 O(logN)의 시간이 걸립니다. (N은 N..
[ 데이터 베이스 ] Replication과 Clustering에 대해서 설명해 보세요.
·
공부 정리/면접 준비
리플리케이션은, DB를 권한에 따라 Master-Slave로 구축하는 방식입니다. Master Node는 쓰기작업만을, Slave Node는 읽기작업만을 처리합니다. 비동기적으로 운영되어 지연시간이 적은 장점이 있지만, 데이터 동기화가 보장되지 않아 일관성에 문제가 있을 수 있고, Master Node에 문제가 생길 경우 복구가 어렵습니다. 클러스터링은, DB를 여러개의 서버에 수평적으로 구축하는 방식입니다. 클러스터링은 SPoF(Single point of Failure)와 같은 문제를 해결하기 위해서 사용합니다. 동기적으로 운영되어 Write에 지연 시간이 있습니다. 항상 일관성있는 데이터를 얻을 수 있고, 하나의 노드가 죽어도 끊김없이 계속 운용이 가능합니다. ### 손병구님 #### https:/..
[ 데이터 베이스 ] Partitioning과 Sharding에 대해서 설명해 보세요.
·
공부 정리/면접 준비
파티셔닝은, Perfomance, Manageability, Availability를 향상시키기 위해 테이블/인덱스를 분리하는 방법입니다. 파티셔닝 방법은 크게 두가지로 볼 수 있습니다. Horizontal Partitioning은, 동일한 스키마의 데이터를 여러개의 테이블에 나누어 저장하는 것을 뜻합니다. Row기반으로 데이터를 분리합니다. Vertical Partitioning은, 하나의 Entity에 저장된 데이터를 여러개의 엔티티로 분리하는것을 뜻합니다. Column기반으로 데이터를 분리합니다. Range Partitioning은, 연속적인 숫자 등을 기준으로 파티셔닝 하는 방식입니다. Hash Partitioning은, 각 파티션마다 해시값의 범위를 할당하는 방식입니다. 범위 Query를 효율적..
포카칩인심
포카의 IT 블로그