본문 바로가기

분류 전체보기

(96)
[프로그래머스] N-Queen with Kotlin 문제 가로, 세로의 길이가 n인 체스판이 있다. 체스판 위의 n개의 퀸이 서로 공격할 수 없도록 배치했을 때, 배치할 수 있는 경우의 수 반환 풀이 과정 1. n개의 퀸을 배치해야되기 때문에 각 열에는 무조건 하나의 퀸이 있어야 함 2. 위에서부터 각 열의 칸마다 퀸을 배치하여 서로 공격 가능하면 pass 불가능하면 다음 열 탐색 3. 위에서부터 배치하기 때문에 퀸의 공격은 위로만 체크 코드 class Solution { var answer = 0 fun solution(n: Int): Int { if(n == 1) return 1 val chessboard = Array(n){Array(n){0}} dfs(chessboard, 0) return answer } fun dfs(chessboard: Arr..
[프로그래머스] 요격 시스템 with Kotlin 문제 A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다. A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용해서 모든 폭격 미사일을 요격하려 합니다. A 나라와 B 나라가 싸우고 있는 이 세계는 2 차원 공간으로 이루어져 있습니다. A 나라가 발사한 폭격 미사일은 x 축에 평행한 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s, e) 형태로 표현됩니다. B 나라는 특정 x 좌표에서 y 축에 수평이 되도록 미사일을 발사하며, ..
[프로그래머스] 2021 KAKAO BLIND RECRUITMENT 순위 검색 with Kotlin 문제 Info에는 4가지 항목과 코딩테스트 점수 개발 언어 (cpp, java, python, -) 지원 직군 (backend, frontend, -) 경력 (junior, senior, -) 소울 푸드 (chicken, pizza, -) 점수 query에는 개발팀에서 궁금해하는 조건이 다음과 같이 주어진다. "java and backend and junior and pizza 100" '-' 는 해당 조건을 고려하지 않는다. 지원자가 지원서에 입력한 4가지의 정보와 획득한 코딩테스트 점수를 하나의 문자열로 구성한 값의 배열 info, 개발팀이 궁금해하는 문의조건이 문자열 형태로 담긴 배열 query가 매개변수로 주어질 때, 각 문의조건에 해당하는 사람들의 숫자를 순서대로 배열에 담아 return 하도록..
[안드로이드] Hilt Hilt는 DI 라이브러리 중 하나로 기존에 존재하던 의존성 주입 라이브러리인 Dagger를 보다 쉽게 사용할 수 있도록 만든 도구입니다. Hilt의 목표 Android App을 위한 Dagger 관련 인프라 간소화 표준화 된 컴포넌트 세트와 스코프로 앱 간의 설정, 가독성 및 이해도, 코드 공유를 쉽게 만들기 앱 간의 설정, 가독성 및 코드 공유를 용이하게 하기 위한 표준 컴포넌트 및 스코프 생성 쉬운 방법으로 다양한 빌드 타입에 대해 다른 바인딩 제공 특징 Dagger2 기반 라이브러리 표준화된 Dagger2 사용법 제시 보일러플레이트 코드 감소 프로젝트 설정 간소화 쉬운 모듈 탐색과 통합 개선된 테스트 환경 Android Studio의 지원 AndroidX 라이브러리의 호환 종속 항목 추가 buil..
[안드로이드] Dependency Injection (DI) DI는 Dependency Injection의 약자로 의존성 주입이라고 한다. 의존성이란? 의존성은 하나의 클래스에서 다른 객체를 참조하는 것을 말한다. 다음 예시를 보면 class A { val B_Class = B() } class B { ... } 클래스 A가 B를 참조하고 있다. 이때 우리는 클래스 A가 B를 의존하고 있다고 한다. DI (의존성 주입) 의존성이 높으면 유지보수 및 테스트가 어려워진다. 따라서 클래스 내부에서 객체를 참조하는 것이 아닌 외부에서 참조시켜주는 것을 의존성 주입, DI라고 한다. 방법은 다음과 같다. A, B 클래스 외의 새로운 매개체를 하나 생성한 뒤, 그 매개체를 통해서 의존성을 관리해주는 것이다. 이 매개체를 Inversion Of Control ( IOC ) 이..
[안드로이드] Coroutine Flow https://developer.android.com/kotlin/flow?hl=ko Android에서의 Kotlin 흐름 | Android Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Android에서의 Kotlin 흐름 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 코루틴에서 흐름은 단일 값만 developer.android.com Flow는 여러 값을 순차적으로 내보낼 수 있는 기능이다. Flow은 코루틴 기반으로 빌드되며, 비동기식으로 계산할 수 있는 데이터 스트림의 개념이다. 데이터 스트림에는 3가지 항목이 있다. 생산자 : 스트림에 추가되는 데이터를 생산 중개자 : 데이터 수정 ( 선택사항 ) 소비자 : 데이터 ..
[안드로이드] 코루틴 코루틴(Coroutine) 코루틴은 Kotlin에서 지원하는 비동기 처리 기술이다. 코루틴은 장기 실행 작업을 관리하는데 도움을 주며, 기능은 다음과 같다. 경량( Lightweight ): 코루틴은 실행 중인 스레드를 차단하지 않는 정지(suspend)를 지원하므로 단일 스레드에서 많은 코루틴을 실행할 수 있고, 동시 작업을 진행하면서 차단보다 메모리를 절약할 수 있다. suspend fun func() 메모리 누수 감소: 구조화된 동시 실행을 사용하여 범위 내에서 작업을 실행한다. CoroutineScope에서만 새 코루틴을 시작할 수 있다. 기본 제공 취소 지원: 취소는 실행 중인 코루틴 계층 구조를 통해 자동으로 전파된다. 사용하지 않는 코루틴을 끝낼 수 있는 기능이다. Jetpack 통합: 많은..
[안드로이드] 스레드 프로세스란? 프로세스는 실행 중인 프로그램, 안드로이드로 치면 App이 프로세스이다. App을 실행하면 안드로이드 OS의 메모리에 App이 올라가 실행된다. 스레드란? 프로세스 내에서 수행되는 작업들은 모두 스레드를 통해 이루어진다. 예를 들어, 계산기 어플이 프로세스라면 계산하는 작업은 스레드를 통해 실행된다. 안드로이드에서의 스레드 App을 실행하면 시스템은 메인 스레드를 만든다. 메인 스레드는 위젯, 뷰의 패키지에 있는 구성요소와 상호작용하는 스레드로, UI 스레드라고도 불린다. 화면에 XML을 출력해주거나, 버튼 클릭에 대한 이벤트 동작 등 모두 메인 스레드가 담당한다. 따라서, 시간이 긴 작업(네트워크, 데이터 쿼리 등)을 UI 스레드에서 진행하면 작업 시간동안 UI가 차단되며, UI 차단이 몇..
[안드로이드] 동기와 비동기 동기와 비동기 동기(Synchronous): 동기란 어떠한 순차적인 작업 A, B, C가 있을 때, A작업이 끝날 때까지 B와 C작업이 대기 즉, 한 번에 하나씩 작업을 처리하는 방식이다. 비동기(Asynchronous): 비동기란 A가 작업 중이여도 B와 C를 작업할 수 있는 상태, 즉, 자원을 효율적으로 사용하여 여러가지 작업을 진행할 수 있는 방식이다. 비동기 방식을 사용해야 하는 이유 사실 간단한 소규모 프로젝트에서는 비동기 방식을 사용하지 않아도 어떠한 문제가 없었을 것이다. 그러나 대규모, 플랫폼 단위로 넘어가면 다양한 작업들이 많아질 것이다. 예를 들어, 어떠한 네트워크 작업이 이루어지는데 이 작업이 생각보다 오래걸린다면 사용자는 이 네트워크 작업이 다 이루어질 때까지 해당 어플을 사용하지 ..
[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 양궁대회 with Kotlin 문제 라이언과 아파치가 양궁 결승 대회를 한다. 라이언이 챔피언 타이틀을 갖고 있기 때문에 룰은 아파치에게 유리한 쪽으로 적용되었다. 과녁의 점수는 0점부터 10점까지 있으며, 선수는 각 n개의 화살을 지급받는다. 과녁에 맞춘 화살의 개수로 중복 없이 둘 중 한명만 각 점수를 얻을 수 있다. 화살의 개수가 같을 경우 아파치의 점수로 인정된다. 예를 들어 10점 과녁에 아차피가 2발, 라이언이 2발 맞췄다면, 아차피가 10점을 획득한다. 이때, 아파치가 점수 별로 화살을 맞춘 과녁이 배열로 주어졌을 때, 라이언이 아파치를 상대로 가장 큰 격차를 내서 이길 수 있는 경우를 반환하면 된다. 조건 화살은 모두 소진해야 한다. 만약 이길 수 없고, 지거나 비기는 경우뿐이라면 [-1]을 반환한다. 점수 차가 같은 ..