전체 글

(구)Android/Kotlin

[Kotlin] REST API & Retrofit

📌 Intro Retrofit은 서버와 통신할 때 사용하는 라이브러리이다. RestAPI는 무엇이고, Retrofit을 사용하기 위해서는 어떻게 해야하는지 알아보도록 하자. 📌 Rest? REST 정의 REST는 Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든것을 의미한다. 즉, 자원의 표현에 의한 상태 전달을 뜻한다. 자원 : 해당 소프트웨어가 관리하는 모든 것(문서, 그림, 데이터...) 표현 : 자원을 표현하기 위한 이름 (DB의 학생 정보가 자원이면, 'students'를 자원의 표현으로 정함) 상태 전달 : 데이터가 요청되는 시점에 자원의 상태를 전달한다. (JSON 혹은 XML을 통해 데이터를 주고 받는 것이 일반적..

(구)Android/Kotlin

[Kotlin] 런타임 권한 요청(Permission)

📌 Intro android 6.0 마시멜로부터 런타임 권한 처리가 추가되었다. 예를 들어서 카메라와 갤러리를 호출하기 위해서는 접근 권한이 필요한데, 6.0 이전까지는 AndroidManifest에 사용할 permission만 추가하면 되었지만 이제는 앱 사용 중 실제로 접근하는 시점에 권한을 허용했는지 체크하여 처리를 해야한다. 이 방법에 대해 알아보도록 하자. 📌 AndroidManifest.xml 에 퍼미션 추가 가장 먼저 AndroidManifest.xml 파일에 퍼미션을 추가해줘야 한다. 📌 권한 요청 private val CAMERA_REQUESTCODE : Int = 100 // 카메라 권한 확인코드 private val permissions = arrayOf(Manifest.permiss..

(구)Android/Kotlin

[Kotlin] 뷰바인딩(ViewBinding 이해하기

📌 Intro 이번에 소개할 뷰 바인딩(view binding)은 안드로이드 아키텍처 구성요소로서 앱 모듈별로 설정하여 사용할 수 있는 기능이다. 뷰 바인딩 기능을 사용하면 뷰를 제어하는 코드를 쉽게 작성할 수 있다. (항상 그렇지만 익숙해지는데까지가 제일 어려운 것 같다.) 📌 View Binding 뷰 바인딩을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있는데, 모듈에서 사용 설정된 뷰 바인딩은 각 레이아웃 XML파일과 바인딩 클래스를 생성한다. 이 바인딩 클래스에는 레이아웃 XML파일에서 ID가 있는 모든 뷰를 참조하는 참조변수가 포함된다. 때문에 findViewById()를 사용하지 않고도 뷰를 다룰 수 있게된다. 앞서 말했던 것처럼 바인딩 클래스는 자동으로 생성되기 때문에 만들어지는 이름..

C++ Programming/알고리즘

[알고리즘] 0-1 BFS

📌 Intro 0-1 BFS란 가중치가 0과 1로만 주어진 그래프에서 최단 경로를 찾는 알고리즘인데, 이에 대해 자세하게 알아보도록 하자. 📌 0-1 BFS 보통 최단 경로를 이야기할 때는 다익스트라 알고리즘이 가장 빠르게 동작한다고 알고 있을 것이다. 하지만 가중치가 0과 1로만 주어진 그래프에서는 다익스트라 알고리즘보다 0-1 BFS가 더빠르게 동작한다. 다익스트라 알고리즘의 시간 복잡도는 O(ElogV)이지만 0-1 BFS는 O(V+E)의 시간 복잡도를 가지기 때문이다. 먼저 0-1 BFS의 동작 원리를 살펴보면 다음과 같다. deque front에서 현재 노드를 꺼낸다. 인접 노드를 체크한다. 현재 노드까지의 비용 + 인접 노드로의 비용 < 인접 노드까지 소요된 비용 의 경우 인접 노드로의 비용을..

C++ Programming/알고리즘

[알고리즘] Binary Search(이진 탐색)

📌 Intro 데이터를 탐색하는 알고리즘 중 가장 기본적인 알고리즘은 순차 탐색이다. 하지만 순차 탐색은 최악의 경우 O(N) 시간 복잡도를 가지고 있기 때문에 상당히 느리다. 이보다 조금 더 빠르게 탐색하는 방법인 이진 탐색 알고리즘에 대해서 알아보도록 하자. 📌 이진 탐색(Binary Search) 이진 탐색은 데이터가 정렬되어 있는 경우에만 사용할 수 있는 탐색 방법이다. 탐색 범위를 절반씩 줄여가면서 탐색을 진행한다. 이진 탐색은 위치를 나타내는 변수 3개를 사용하는데 탐색하고자 하는 범위의 시작점, 끝점, 중간점 이다. 찾으려는 데이터와 중간점의 데이터를 반복적으로 비교하여 탐색의 범위를 줄여나가고 원하는 데이터를 찾는 것이 이진 탐색 과정이다. STEP 0 이미 정렬된 10개의 데이터 중 값이..

C++ Programming/알고리즘

[알고리즘] BFS(깊이 우선 탐색)

📌 Intro 그래프 탐색의 기본은 BFS와 DFS다. 그 중 BFS에 대해 알아보도록 하자. 📌 BFS(너비 우선 탐색) BFS란 Breadth-First Search로 너비 우선 탐색을 말하며 시작 노드로부터 인접한 노드를 먼저 탐색하고 멀리 떨어져있는 노드를 가장 나중에 방문하는 방법이다. 보통 BFS는 두 노드 사이의 최단 경로를 구할 때나 임의의 경로를 찾고 싶을 때 많이 사용한다. BFS는 자료구조 큐(Qeueu)를 이용하여 구현할 수 있다. 인접 리스트로 표현된 그래프의 경우 시간 복잡도는 O(N+E)가 된다. 인접 행렬로 표현된 그래프의 경우 시간 복잡도는 O(N^2)이 된다. 간선의 숫자가 적다면 인접 행렬보다 인접 리스트를 사용하는 것이 시간상 유리하다. STEP 0 다음과 같은 그래프..

C++ Programming/알고리즘

[알고리즘] DFS(깊이 우선 탐색)

📌 Intro 그래프 탐색의 기본은 BFS와 DFS다. 그 중 DFS에 대해 알아보도록 하자. 📌 DFS(깊이 우선 탐색) DFS는 Depth-First Search로 깊이 우선 탐색이다. 시작 노드로부터 계속 갈 수 있을 때까지 탐색을 진행하다 갈 수 없게되면 다시 가장 가까운 갈림길로 돌아와서 다른 방향으로 탐색을 진행하는 방법이다. 모든 노드를 방문하고자 하는 경우 DFS를 사용하는데 이전에 다루었던 BFS보다 구현 방법이 간단하지만 단순 검색 속도 자체로만 보면 BFS가 더 빠르다. DFS를 구현하기 위해서는 스택(Stack)이라는 자료구조를 사용한다. DFS의 동작 과정은 다음과 같다. 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인..

C++ Programming/알고리즘

[알고리즘] Floyd-Warshall(플로이드 워셜) 알고리즘

📌 Intro 이전에 정리했던 다익스트라 알고리즘은 "한 지점에서 다른 특정 지점까지의 최단 경로를 구해야 하는 경우"에 사용할 수 있는 최단 경로 알고리즘이다. 하지만 이번에 살펴볼 플로이드 워셜 알고리즘은 "모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우"에 사용하는 알고리즘이다. 📌 Floyd-Warshall Algorithm 다익스트라 알고리즘은 매 단계마다 최단 거리를 가지는 노드를 하나씩 반복적으로 선택한다. 그리고 해당 노드를 거쳐 가는 과정을 진행하면서 최단 경로 리스트를 수정해나간다. 그리고 이 때 방문한 노드인지 확인하는 과정을 거친다. 하지만 플로이드 워셜 알고리즘은 노드를 방문할 때 방문한 노드인지 아닌지 확인할 필요가 없이 모든 노드에 대해서 동작하는 알고리..

Krrong
노는게 제일 좋아