분류 전체보기91 재귀 소개 및 DP의 맛 알고리즘 문제를 풀다보면 맞닥뜨리는 흔한 문제는 재귀와 DP다. 하지만 일반적으로 재귀적 사고를 한다는 것 자체가 쉽지 않다. 다양한 문제를 풀면서 내가 느낀건 반복 되는게 있어야 한다. => 문제를 더 작게 만들 수 있어야 한다. 탈출 지점이 있어야 한다. 여기서 더 중요한 건 2번이다. 탈출 지점이 정확하게 없으면 재귀적으로 풀 수 없다. 재귀의 대명사 피보나치 수열을 풀어봤다. def fibo(n): if n 2019. 5. 8. 줌 및 이동 초기화 왜 안되지? zoom과 pan을 초기화 시키는 기능을 개발하는데 초기화 이후에 전에 저장된 값으로 돌아가는 증상이 발생. 어디가 문제일까? 초기화 이후에 zoom과 pan이 발생하면 d3.event.transform의 값을 이용해서 동작하는데 이 때의 값이 초기화 안된 상태로 계속 사용되어 진다. 어떻게 초기화 하지? 무식하게 d3.event.transform에 넣을 순 없고... 해보면 알겠지만 d3와 무관한 액션에 관해서는 d3.event가 발생하지 않는다. 방법을 찾다보니 역시나 레퍼런스들이 존재한다. selection.call(zoom.transform, d3.zoomIdentity) 여기서 중요한 점은 위의 selection은 최초 zoom을 연결한 selection이어야 한다. 엉뚱한 sele.. 2019. 5. 7. preventDefaultAlign 문서에도 없는 config container에 floating속성을 사용해서 화면에서 정렬 시켜줘야 하는 기능이 있었다. alignTo 함수나 showBy 함수를 이용해서 정렬하는데 정렬이 됐다가 화면의 중앙으로 이동하는 것이다. (디버깅 해보니) 참고로 alignTo 함수는 컴포넌트가 visible 상태여야만 한다. 직감적으로 defaultAlign 문제겠구나 하고 수정했는데 offset관련 config이나 메쏘드가 없어서 문제 였다. 내가 원하는 건 defaultAlign을 사용 안하는건데... config도 존재 하지 않아서... ExtJS 내부 소스를 뒤적뒤적 하다보니 내가 원하는 관련 config를 찾았다! 문서에는 명시되어 있지 않다. 속성명은 preventDefaultAlign이다. 해당 속.. 2019. 5. 2. Fraudulent Activity Notifications def get_median(counter, d): count = 0 for i, c in enumerate(counter): count += c if count > d // 2: # 여기서 찾은 i 값이 중앙값(d=홀수 일 경우) break if d % 2 == 1: return i * 2 else: for j in range(i, -1, -1): # 전 인덱스부터 검사하는게 아니라 현재 인덱스부터 검사한다. # 카운팅 한 개수이기 때문에 같은 수 일 수 있다. count -= counter[j] if count < d//2: break return i + j def activityNotifications(expenditure, d): count = 0 counter = [0]*201 for exp in.. 2019. 4. 29. Array Manipulation def arrayManipulation(n, queries): newArr = [0] * n for start, end, value in queries: newArr[start-1] += value if end < n: newArr[end] -= value total = 0 maxVal = 0 for v in newArr: total += v maxVal = max(maxVal, total) return maxVal 문제를 보는 순간 아이디어나 패턴이 떠오르면 바로 해당 방식으로 접근하지만, 대부분의 경우에는 그렇지 않기 때문에 거친 방식 으로 접근한다. 거친 방식이란? 시간 복잡도를 생각하지 않고 문제를 푸는 방식이다. Time out 을 신경쓰지 않는 해결 방안 그래서, 쿼리 만큼 반복문을 돌면서 시.. 2019. 4. 28. Minimum Swaps def minimumSwaps(arr, n): findIndex = 1 swapCount = 0 hashNumber = dict((val, idx) for idx, val in enumerate(arr)) for i in range(0, n): if arr[i] == i+1: continue else: foundIndex = hashNumber[i+1] hashNumber[i+1], hashNumber[arr[i]] = i, foundIndex arr[i], arr[foundIndex] = arr[foundIndex], arr[i] swapCount += 1 return swapCount 간단히 문제를 풀면 이중 포문 을 돌면서 자신의 위치에 맞는 값을 찾아서 교환하고 카운팅을 올려주면 된다. 대략 n .. 2019. 4. 28. 이전 1 ··· 3 4 5 6 7 8 9 ··· 16 다음