전체 글

전체 글

    [BFS][Kotlin] 2021 카카오 채용연계형 인턴십 - 거리두기 확인하기

    문제 풀이 언어 Kotlin 코드 import java.util.* class Solution { fun solution(places: Array): IntArray { val answer = mutableListOf() val size = places.size for (place in places) { var check = 0 for (i in 0 until size) { for (j in 0 until size) { if (place[i][j] == 'P') { if (bfs(place, i, j, size).not()) { check = 1 break } } } if (check == 1) { break } } if (check == 1) answer.add(0) else answer..

    [TIL] 22.03.19

    공부한 것 MVC, MVP, MVVM, AAC 알게된 것 1. MVC 우선 가장 일반적으로 사용되는 아키텍쳐 패턴이다. Model, View, Controller 로 나뉜다. Model 은 데이터 생성, 삭제, 갱신 등의 로직이 들어있다. View 는 사용자에게 보여지는 화면이다. Controller 는 사용자의 입력을 처리한다. 우선 사용자가 View 를 통해서 입력이 들어오고 Controller 가 이를 처리한다. 이 때 입력을 분석해서 Model 과 View 에 갱신 요청을 한다. Model 은 데이터를 갱신하고 View 는 UI 를 갱신한다. 정리하자면, Controller 는 Model 과 View 가 무엇을 해야할 지 알고 있고 이를 통제하고 있다. Controller 를 통해서 Model 과..

    [TIL] 22.03.17

    공부한 것 안드로이드 강의 수강 CameraX Glide Content Resolver ScaleGestureDetector 알게된 것 1. AddTextChangedListener 대부분의 어플리케이션에서 검색창에 검색어를 입력하면 사용자가 Enter 를 누르기도 전에 입력한 검색어에 따라 자동완성 검색어가 변경되는 것을 볼 수 있다. 이를 구현하기 위해선 EditText 의 텍스트 변화를 감지해야하는데 이를 AddTextChangedListener 를 통해 감지할 수 있다. private fun bindViews() = with(binding) { editTextView.addTextChangedListener { Log.d("Changed!", editTextView.text.toString()) ..

    [TIL] 22.03.16

    공부한 것 안드로이드 강의 수강 Retrofit2, OkHttpLoggingInterceptor Shimmer Glide Content Resolver Unsplash API 알게된 것 1. Glide 오늘 공부를 하면서 Glide 가 생각보다 엄청 강력한 라이브러리라는 것을 깨달았다. Glide 를 사용한지는 꽤 됐지만 이를 제대로 사용하고 있지 않았다. 우선 그동안 Glide 를 사용할 때 아래처럼 써왔다. 그냥 단순히 이미지뷰에 이미지를 넣어주기 위한 용도로... private fun bindViews() { Glide.with(binding.root) .load(profileImageUrl) .into(binding.profileImageView) } 하지만 정말 다양한 기능을 제공하고 있었다. ..

    [TIL] 22.03.15

    공부한 것 안드로이드 강의 수강 알게된 것 1. OkHttpLogging Retrofit 을 사용해서 API 를 호출할 때 클라이언트의 문제인지 서버의 문제인지를 확인하기 위해 HTTP 의 로그를 봐야하는 경우가 있다. 이 때 사용할 수 있는 것이 OkHttp 의 HttpLoggingInterceptor 이다. // Retrofit Interface 를 구현한다. private val openApiService : OpenApiService by lazy { Retrofit.Builder() .baseUrl(Url.OPEN_API_BASE_URL) .addConverter(GsonConverterFactory.create()) .client(buildOkHttpClient()) .build() .crea..

    [TIL] 22.03.14

    공부한 것 안드로이드 강의 수강 카카오톡, 공공데이터 API Retrofit, OkHttpLoggingInterceptor FusedLocationProvider Coroutine AppWidgetProvider Service Lifecycle 알게된 것 1. FusedLocationProvider 안드로이드에서 위치 정보를 받아올 수 있는 방법에는 LocationManager 와 FusedLocationProvider 가 있다. 우선 LocationManager 은 getLastKnownLocation 또는 LocationListener 를 통해서 위치 정보를 가져올 수 있다. // LocationManager 를 정의한다. val locationManager = getSystemService(LOCA..

    [TIL] 22.03.13

    공부한 것 안드로이드 강의 수강 AppWidgetProvider 프로그래머스 1문제 알게된 것 안드로이드 위젯을 사용하기 위해서는 Manifest 에 Recevier 를 등록하고 이 때 action 과 meta-data 를 넣어준다. meta-data : 위젯 레이아웃의 크기, 초기 레이아웃 리소스, 업데이트 빈도 등 앱 위젯의 기본적인 특성을 정의한다. minWidth, minHeight : 위젯이 기본적으로 사용하는 최소 크기이다. updatePeriodMillis : onUpdate 메소드를 호출하여 위젯을 업데이트하는 빈도를 결정한다. 업데이트 시에 디바이스 대기모드가 해제되므로 백그라운드에서는 최소 30분, 이보다 짧은 시간 간격으로 업데이트하는 것을 금한다. previewImage : 앱 위젯..

    [문자열 / Kotlin] 2019 KAKAO BLIND RECRUITMENT - 오픈채팅방

    문제 풀이 언어 Kotlin 코드 class Solution { fun solution(record: Array): Array { val history = arrayListOf() val name = mutableMapOf() val result = arrayListOf() for (e in record.iterator()) { val act = e.split(" ") when (act[0]) { "Enter" -> { name[act[1]] = act[2] history.add(Pair(act[0], act[1])) } "Leave" -> { history.add(Pair(act[0], act[1])) } "Change" -> { name[act[1]] = act[2] } } } history.map ..

    [구현 / Kotlin] 2022 SK ICT Family 개발자 채용 챌린지 - 2번

    우선 간만에 알고리즘 문제를 접했던 터라 많이 어려웠다. FE / APP 개발 직군을 선택했고 총 4문제가 나왔는데 DP 1, 구현 1, 그래프 2 이렇게 나왔다. 사정이 있어서 30분 정도 뒤늦게 참석했고 2시간 동안 2번 하나만 풀었다. 시간이 더 있었어도 다른 문제를 풀지 못했을 것이다. 안드로이드 공부 때문에 알고리즘을 소홀히 했는데 앞으로는 편식하지 말고 알고리즘도 꾸준히 풀어야겠다. 문제 문제 저작권에 의해서 캡쳐는 하지 못했고 간단하게 설명하자면 주어진 배열을 재정렬하는 문제였다. 시계 방향, 반시계 방향으로 총 2가지의 방향이 있었으며 배열의 크기는 홀수와 짝수가 존재했다. 결과적으로 총 4가지 경우 대해 배열을 재정렬하는 문제였다. 풀이 언어 Kotlin 코드 class Solution ..

    [문자열 / Kotlin] 2020 KAKAO BLIND RECRUITMENT - 문자열 압축

    풀이 언어 Kotlin 코드 fun solution(s: String): Int { var minLength = s.length for (i in 0 until s.length / 2) { var subString = s.slice(0..i) var answer = "" var cnt = 1 var last = 0 for (j in i + 1 until s.length - i step i + 1) { // 마지막 Index 를 저장한다. last = j + i + 1 // 같은 SubString 인 경우 이를 카운트한다. if (subString == s.slice(j..j + i)) cnt += 1 // 다른 SubString 인 경우 else { if (cnt > 1) { // 숫자 + SubStri..