일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- kafka
- 단위테스트
- 2016년회고
- 데이터레이크
- hackercup2017
- 회고
- 개발자로살아남기
- 실전사례
- clean code
- 동시성
- 켄트백
- 데이터유통
- functional thinking
- 개발자
- Raw-Request-URI
- datalake
- 개발7년차매니저1일차
- 박종천
- 코딩인터뷰
- spray
- 해커컵
- 2017회고
- wait region split
- 데이터플랫폼
- 알고스팟
- 함수형 사고
- coursera
- 클린코드
- 데이터야놀자
- 테스트주도개발
- Today
- Total
목록알고리즘/알고스팟 (23)
Software Engineering Note
문제: 남극기지 / 그래프 or 이진탐색 모든 노드가 전파를 받을 수 있어야 하고 전파의 출력은 최소화 해야한다. 이 문제를 해결하는데 두 가지 방법을 사용할 수 있다. 1. parametric search parametric search는 어떤 알고리즘으로 해를 바로 구해내는 것이 아니고, 임의의 값을 던지고 맞는지 확인해가며 해를 구하는 방법이다. 앞에서 언급한 임의의 값을 정하는 과정에 이진탐색이 사용될 수 있다. 이 방법을 이용한 알고리즘은 다음과 같다. 1. 초기 값으로 해의 최소값과 최대값을 이진탐색의 low, high 값으로 각각 지정한다. 2. mid((low+high)/2)값이 해가 될 수 있는지 검사해본다. 이말의 의미는 전파의 출력이 mid값인 경우 모든 노드들이 연락을 주고 받을 수..
문제: Shisen-sho / 조합탐색 사천성이라는 게임이 문제의 배경이고 게임 난이도를 정하는 것이 문제이다. 게임 난이도는 한 번에 없앨 수 있는 tile의 쌍으로 정해진다. 탐색의 방향이 정해져있으면 간단했을 건데 상.하.좌.우 모두 훑어봐야 하고, 중복되는 경우는 카운트 하지 말아야하기 때문에 약간 까다로웠다. 소소한 고민. 1. 꺽어지는 경우를 어떻게 판단할까? 문제에서는 3번 이상 방향이 전환되는 경우는 카운트하지 말아야한다고 했다. 방향 전환 유무를 어떻게 감지할까? 생각해보니 이전위치와 다음위치를 검사하면 될것같았다. 방향이 바뀌지 않았다면, 다음위치와 이전 위치가 적어도 x, y 둘 중 하나의 값은 같을 것이다. 둘다 다르다면 방향이 전환된 것이다. 그래서 재귀함수에 이전좌표를 넘겨줬다...
문제: MATEXP / 분할정복 한 번에 한 번씩 계산해서는 시간내에 해결할 수 없다. 그렇다면? 반 씩 나누어서 계산하면 빠르게 해결할 수 있다. 1*1 행렬 계산을 해서 승수 2에 대한 값을 만들고, 다시 2*2를 해서 승수 4에 대한 값을 만들고.. 이런 식으로 하면 logN번만 계산하면 된다. 100 by 100 행렬 계산에 그리 큰 시간이 소요되지 않으므로, 행렬 계산은 단순하게 3중 loop로 처리했다. 총 복잡도는 코드: https://github.com/xgate/algospot/blob/master/DIV/MATEXP.cpp