[자료구조] 2-3 트리
·
CS/자료구조
기본적인 내용은 건너뛰겠습니다. 2-3 트리를 포함한 2-3-4 트리 혹은 Multi-way 탐색 트리 까지 공통점이 있습니다.한 노드에 들어갈 수 있는 자식 노드의 개수가 m개라고 하겠습니다. 1. 루트 노드는 적어도 2개의 자식 노드가 있어야 합니다.2. 모든 leaf 노드는 같은 높이에 위치해야합니다. 즉, 항상 균형잡힌 형태를 유지해야합니다.3. 루트 노드를 제외한 모든 노드는 $\lceil \frac{m}{2} \rceil$ 개의 자식 노드들이 있어야합니다. 이번에 소개할 내용은 2-3 트리이며, m이 3인 트리중 하나라고 할 수 있습니다. 위 공통점에 해당하는 내용을 잘 생각하고 읽어주세요. 아래 예시로 드는 모든 2-3 트리들의 그림은 다음과 같은 공통점이 있습니다. 박스가 하나인 경우 --..
[안드로이드] ViewBinding 사용해보기
·
안드로이드
기존에는 특정 뷰의 요소들을 가져오기 위해 findViewId 메서드를 사용했습니다. ViewBinding은 이를 해결해줄 수 있습니다. 먼저 build.gradle(Module)에 다음과 같이 적어줍니다. android { ... buildFeatures { viewBinding = true } } 이후 gradle을 sync 시켜줍니다. sync가 됐다면, 기존에 화면을 띄워주던 onCreate메서드를 다시 작성해주어야 합니다. 우선 lateinit으로 binding 변수를 생성해줍니다. 이후 onCreate 메서드에서 inflate메서드를 통해 binding에 뷰를 할당해줍니다. class MainActivity : AppCompatActivity() { lateinit var binding: Ac..
[안드로이드] RecyclerView 사용 및 클릭 이벤트 넣어보기
·
안드로이드
RecyclerView는 이미지나 텍스트를 리스트화하고, 스크롤하며 볼 수 있게 해주는 컨테이너입니다. 이번에 RecyclerView를 사용하여, 리스트에 있는 문자열을 보여주는 앱을 만들어보겠습니다. 먼저 메인 화면에 RecyclerView를 추가한 후, id를 recyclerView로 해주겠습니다. 다음으로 문자열 리스트를 받는 RecyclerView의 Adapter를 만들어주어야합니다. RVAdapter.kt를 만들어 주고 인자로 문자열 리스트를 받게하겠습니다. RVAdapter는 RVAdapter의 viewHolder를 타입으로 갖는 Adapter를 반환해야합니다. 하지만 viewHolder는 직접 inner 클래스로 만들어주어야합니다. viewHolder에 문자열 리스트의 원소를 하나하나 다른 ..
[안드로이드] 뒤로 가기 두 번 누르면 종료되게 만들기
·
안드로이드
뒤로가기를 누르면 발생시킬 동작들은 onBackPress 메서드에 있습니다. 따라서 먼저 이를 override 시켜주겠습니다. onCreate 메서드와 동일한 스코프에 정의해야함을 주의하세요. package com.example.listview_ex import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ... } override ..
[안드로이드] ListView 구현하기
·
안드로이드
ListView는 MainActivity에서 Adapter에게 정보를 전달하고, Apdater가 ListView에 요소들을 넣어주는 흐름을 가집니다. 먼저 간단히 ListView를 표시할 화면을 구성하겠습니다. 그리고 ListView에 들어갈 요소들의 레이아웃을 구성해주겠습니다. ListView에 들어갈 ListViewItem은 다음과 같이 화면에 보여질 예정입니다. ListViewItem에 들어갈 데이터 형식을 만들어주기 위해 data class인 ListViewItemModel.kt를 만들어 주겠습니다. package com.example.listview_ex data class ListViewItemModel ( var title : String = "", var description : Strin..
[안드로이드] DataBinding 으로 TextView 업데이트 하기
·
안드로이드
기존에 xml에서 특정 뷰에 대한 접근을 위해서는 다음과 같이 findViewById 함수를 사용했습니다. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val btn = findViewById(R.id.testBtnId) btn.setOnClickListener { Toast.makeText(this, "clicked", Toast.LENGTH_LONG).show() } } } 하지만 xml의 특정 View를 계속 findViewById로 가져오게 ..
[안드로이드] 다음 화면으로 넘어가기 & 다음 화면에게 데이터 넘겨주기
·
안드로이드
MainActivty에서 특정 ImageView를 클릭하면 다음 화면으로 넘어간다고 하겠습니다. XML은 다음과 같습니다. 우선 MainActivity에서 XML에 있는 ImageView의 아이디를 찾아 객체로 가져오겠습니다. package com.example.test import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.ImageView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(..
[안드로이드] 타이틀 바 없애기
·
안드로이드
res/values/themes/themes.xml 에서 style 안에 다음 코드를 넣어주면 된다.
[안드로이드] 처음 시작하는 화면 설정하기 & 일정 시간 delay 준 후 특정 코드 실행시키기
·
안드로이드
app/maifests/AndroidManifest.xml 을 살펴보면 딱봐도 처음에 시작할 것 같은 화면이 다음과 같이 작성되어있습니다. 생각보다 쉽게 찾아버렸습니다. 처음 시작하는 화면은 intent-filter와 exported가 true 라는 점 빼고는 다른 activity와 차이점이 없습니다. 일정 시간 delay를 준 후 특정 코드를 실행시키기 위해서는 Handler의 postDelayed가 필요합니다. 예를 들어 3초 뒤에 다른 화면으로 이동시키는 코드를 작성해보겠습니다. Handler(Looper.getMainLooper()).postDelayed({ startActivity(Intent(this, MainActivity::class.java)) finish() }, 3000) Handle..
[안드로이드] Android Studio와 스마트폰 무선 연결
·
안드로이드
저는 22년 5월 현재 안드로이드 S8을 사용하고 있습니다. 따라서 무선 디버깅 + adb를 통해 스마트폰과 무선 연결 하는 방법을 찾으셨다면 이 글에는 없음을 밝힙니다. 또한 윈도우를 사용중입니다. 맥 유저분들도 다음에 뵙겠습니다. 안드로이드 특정 버전에서는 개발자 옵션에서의 무선 디버깅이 없습니다. 그럼 맨날 안드로이드 개발할 때마다 선으로 연결하면서 개발을 해야하는건가? 라고 생각했는데, 다행히 방법을 찾았습니다. 아쉽게도 선이 아예 필요가 없는 것은 아닙니다. 우선 스마트폰과 컴퓨터를 연결할 선, 스마트폰, 컴퓨터를 준비해주세요. 스마트폰과 컴퓨터를 연결한 후, 터미널을 엽니다. 우선 스마트폰과 노트북의 연결을 위해 다음을 체크해주셔야합니다. 1. 노트북과 스마트폰이 같은 네트워크에 있는가?(같은..