희소 테이블(Sparse Table)
설명 희소 테이블이란 정적 데이터에서 구간 쿼리를 빠르게 계산할수 있는 자료 구조다. 예를 들어 Array[0] - Array[N]과 함수 $F$가 존재할 때, $0 \leq i \leq j \leq N$을 만족하는 $F(i, j)$를 빠르게 구할 수 있다. 이를 사용하면 희소 테이블을 구성하는 데에는 $O(N \log N)$, 쿼리 당 $O(\log...
설명 희소 테이블이란 정적 데이터에서 구간 쿼리를 빠르게 계산할수 있는 자료 구조다. 예를 들어 Array[0] - Array[N]과 함수 $F$가 존재할 때, $0 \leq i \leq j \leq N$을 만족하는 $F(i, j)$를 빠르게 구할 수 있다. 이를 사용하면 희소 테이블을 구성하는 데에는 $O(N \log N)$, 쿼리 당 $O(\log...
개념 최장 증가 부분 수열(Longest Increasing Subsequence)란, 수열에서 가장 긴 부분 수열을 의미한다. 1 13 34 42 27 71 18 8Text is not SVG - cannot display 위 수열에서 LIS는 [1, 3, 4, 7, 8]이며, 길이는...
설명 위상 정렬(topological sort)는 순서가 정해진 원소를 정렬하는 알고리즘이다. 대학교 강의의 선수과목처럼 한 강의를 수강하기 전에 무조건 들어야 하는 강의가 있다면 그것을 고려해 강의 순서를 정렬하는 알고리즘이 바로 위상 정렬이다. 위상정렬은 DAG(Directed Acyclyc Graph, 방향성 비순환 그래프)에서만 가능하다. 컴...
백준 #2623 음악 프로그램 위상 정렬을 사용한 문제. 위상 정렬에 관한 설명 인접 리스트를 사용해 그래프를 입력받고 위상 정렬을 사용해 적절한 순서로 출력한다. M명의 보조 PD가 정한 순서를 그래프로 구성하면 일반적인 위상 정렬 문제가 된다. #include <iostream> #include <queue> #incl...
앱을 사용하다보면 사용자 텍스트 입력이 필요한 필드를 입력하다 필드 바깥쪽을 터치 시 소프트 키보드가 숨겨지는 모습을 볼 수 있다. 안드로이드의 경우 그런 동작이 EditText를 사용한다고 해서 자동으로 적용되지 않기 때문에 그것을 적용하는 방법을 작성해본다. 적용 전 <?xml version="1.0" encoding="utf-8"?> ...
안드로이드에서 화면에 나타나는 UI 구성은 xml 파일에 담겨있다. 화면을 구성하는 레이아웃과 뷰는 xml에 정의돼있는데, 이를 코드 상에서 접근할 수 있게 만들어야 한다. inflate는 ‘부풀리다’라는 뜻을 갖고 있는데, xml에 정의된 뷰를 부풀려 객체화시키는 것을 뜻한다. //액티비티의 onCreate 콜백 class MainActivity ...
코틀린에는 객체의 context 내에서 코드 블록을 실행하기 위한 함수들이 있는데 이를 scope 함수라고 한다. Scope 함수에 람다 표현식을 전달하면 해당 코드 블록이 실행되며 이름 없이 객체에 접근할 수 있다. Scope 함수에는 let, run, with, apply, also가 있다. 기본적으로 이 함수들이 하는 역할 람다로 전달된 코드 ...
안드로이드 코드를 짜면서 by lazy, by viewModels()를 쓸 때 by라는 키워드를 사용했는데 이것이 어떤 역할을 하는지 작성해보려고 한다. 위임 패턴 객체가 요청을 다른 객체(helper object)에 위임해서 처리하는 패턴이다. class Rectangle(val width: Int, val height: Int) { fun...
배경 약 4개월 동안 네이버 커넥트재단에서 진행하는 부스트캠프 웹·모바일 6기 멤버십 과정을 마무리했다. 멤버십 과정의 마지막 6주동안 진행한 프로젝트 등산왕에 대한 정리를 하려고 한다. 앱 소개 깃헙 레포지토리 등산왕은 등산 기록 관리 앱이다. 앱에는 크게 세 가지 기능이 있다. 등산 기록 내가 개발을 맡은 실시간 등산 기록을 하는 기...
브로드캐스트 리시버는 안드로이드 4대 구성 요소 중 하나다. 브로드캐스트 리시버에 대해 이해한 것을 정리해보려 한다. 브로드캐스트란? 브로드캐스트는 방송이라는 뜻으로, 안드로이드에서는 publish-subscribe 패턴과 비슷한 느낌으로 브로드캐스트를 전송하고 수신할 수 있다. 브로드캐스트는 시스템 또는 사용자(개발자)가 전송할 수 있다. 시스템...