본문 바로가기

분류 전체보기91

Count Triplets def countTriplets(arr, r): m2 = defaultdict(int) m3 = defaultdict(int) total = 0 for val in arr: if val in m3: total += m3[val] # 1 2 2 4 if val in m2: m3[val * r] += m2[val] m2[val * r] += 1 return total 이 문제를 처음 풀었을 때는 삼중 포문을 사용 했었다. 첫번째 값을 기준으로 두번째, 세번째 값을 찾는 방식이었는데 세 숫자의 인덱스가 a < b < c 순이 되는지 확인했다. 그 상태에서 두번째, 세번째 숫자를 찾는 방법을 아무리 최적화 하려고 해도 방법이 안떠오르는 것이다. 그래서 첫번째 값을 기준으로 하는게 아니라 가운데 값을 기준으로 하.. 2019. 4. 28.
요소 추가하기 d3 insert 잘 사용하자 d3에서 특정 요소 하위에 다른 요소를 집어 넣는 방법은 크게 2가지가 있다. append & insert dom의 appendChild와 insertBefore와 같은 동작이다. append는 맨 뒤에 넣고, insert는 앞에 넣고! 단, 오늘 insert를 처음 사용하면서 실수한 건 insert는 2개의 인자를 받는데 type, tag 이름이 들어간다. before, 뒤에 올 특정 선택자(css 선택자 사용) 여기에서 before 부분을 이해를 잘못해서 삽질을 했다. 문서를 잘 읽어야지... CSS 선택자를 사용해야 한다! 2019. 4. 19.
사용자 정의 Bind Custom bind config ExtJS에서 제공해주는 bind config이 아닌 사용자 정의 bind config을 만들고 싶을 때가 있다. 어떻게 해야할까? 사용법 config: { foo: null, // null 이외의 값으로 초기화 시 update 이벤트 발생 }, twoWayBindable: [&#39;foo&#39;], 먼저 config를 추가 해주고 twoWayBindable에 해당 값을 설정 해준다. (twoWayBindable 관련 사항은 문서 참조) updateFoo() { // Do something } 이렇게 설정해주면 간단하게 된다. ViewModel이나 setFoo를 이용해서 값을 설정하면 updateFoo 함수가 실행된다. 2019. 4. 16.
Publish Custom ViewModel 데이터 ExtJs에서는 사용자에게 기본적인 viewModel 데이터를 제공해준다. 예를 들면, Text 컴포넌트는 기본적으로 rawValue, value, dirty 값을 제공한다. 해당 값들은 viewModel 및 reference를 이용해서 사용할 수 있다. 하지만 다른 값들을 나의 입맛에 맞게 사용하고 싶을 때가 있다. 그 때 사용 할 수 있는게 publishes란 config과 publishState라는 함수다. 사용법 Text 컴포넌트에 값이 유효한지 체크하는 config를 추가해서 사용하고 싶다면, publishes: {&#39;value&#39;, &#39;rawValue&#39;, &#39;dirty&#39;, &#39;valid&#39;} valid라는 값을.. 2019. 4. 13.
좌표 시스템 좌표계 d3에서 svg 엘레먼트들을 드래깅해서 위치 값을 변경해주는 경우가 생긴다. 이 때 2가지의 방법이 있다. 각 엘레먼트들을 독립적으로 좌표값을 변경시키는 방법 각 엘레먼트들을 group으로 묶고 group을 transform의 translate를 이용해서 변경시키는 방법 나는 2번을 이용해서 구현했는데, 이렇게 되면 메인 svg에 pan & zoom 기능이 있을 경우에 좌표 시스템이 변환이 된다. pan 또는 zoom을 사용할 경우 transform을 이용해서 좌표계를 변환 시키기 때문에 하위에서 좌표 값을 변경하는 경우 이상한 위치로 이동 되는 현상을 볼 수 있다. 이 때에는 pan 또는 zoom 된 값 만큼 좌표 값을 변환 시켜줘야 정상적인 위치로 이동한다. 2019. 4. 5.
브라우저에게 이벤트란? 브라우저가 이벤트를 감지하는 방법은 2가지로 나눌 수 있습니다. 이벤트 버블링(Event Bubbling) 어떤 특정 요소에서 이벤트가 발생했을 경우 상위 요소로 이벤트를 전파하는 방식(단, 상위 요소가 같은 이벤트 핸들러를 가지고 있다는 가정) 이벤트 캡처링 위의 이벤트 버블링과 반대되는 방식으로 어떤 특정 요소에서 이벤트가 발생했을 경우 최상위 요소(body)부터 해당 요소로 내려가는 방식 위의 2가지 방식으로 이벤트가 발생하기 때문에 개발자는 원리를 숙지하고 있어야 예상치 못한 동작이 발생했을 경우 추론하여 해결 할 수 있습니다. 그럼 기본 동작을 개발자가 조작 하기 위해서는 어떻게 해야 할까요? 이벤트 조작 방법 3가지 event.preventDefault() 현재 이벤트의 기본 동작을 중단(예:.. 2019. 3. 13.