Algorithm Training – 이진 탐색

요즘들어 다시 알고리즘 이론 공부를 시작하고 있다. 이글에서는 이진 탐색 알고리즘 (Binary Search Algorithm)을 공부한 내용을 간단하게 정리한다. 선형탐색과 달리 검색 범위를 매회 절반정도로 감축함으로서 효율을 높이는 탐색 방법이다. 탐색 범위의 중간에 위치한 요소를 가져와, 찾고자 하는 키워드와 비교해서 범위를 점점 줄여나간다. 하지만 그 때문에 요소가 오름차순 또는 내림차순으로 정렬된 배열에서만 작동한다. 본 알고리즘의 기본…

Firestore 사용시 시간정보 저장 및 쿼리 방법 (ServerTimeStamp/NTP)

시스템 밀리초를 Firestore 데이터베이스에 그대로 저장해버리는 이상한 짓을 해버렸다. 문서 작성 시각, 수정 시각 등을 각 사용자 디바이스의 밀리초로 지정했더니 뒤죽박죽 난리도 아니다. 운영하는 앱이 게시판 형식의 서비스가 아니라 실시간 채팅 서비스나 게임이였다면 상상도 하기가 싫다. 보통 현재 시간을 가져올 때 이런 식으로 시스템 시간을 가져온다. 물론 백엔드 서버 개발을 할 때는 시스템 시간을 가져와서…

Kotlin – 유효성 체크 isEmpty, isBlank, isNullOrEmpty

개발을 하면서 문자열의 유효성을 체크해야 되는 경우가 있다. 이를테면 사용자가 필드에 값을 입력하였는지를 판단하는 때가 있다. 이런 식의 유효성 체크 방법은 매우 익숙하다. Kotlin 에서는 이런 유효성 체크 로직에 대해 몇 가지 함수들을 기본적으로 제공한다. 대표적으로 isEmpty(), isBlank(), isNullOrEmpty, isNullOrBlank 가 있다, 이 함수들이 각각 어떻게 결괏값을 내주는지 알아보자. isEmpty() isEmpty는 문자열의 length를 기준으로, 1…