전체 글 230

프로그래머스 - 미로탈출

최대한 빠르게 미로를 탈출하는데 걸리는 시간을 구해야한다.즉 최단거리를 구하는 문제라서 나는 bfs 를 선택했다. 주의해야할점은 출구를 지나쳐 지나갈 수 있지만 레버를 당기고 와야 출구가 열리기 때문에레버를 먼저 갔다와야만 탈출을 할 수 있다. 여기서 아이디어가 하나 나오는데 bfs를 두번 사용하는것이다.레버까지 도달하는데 걸리는 최단거리와레버에서 출구까지 도달하는 최단거리를 각각 구하고 합쳐주는것이다. 검색하지 않고 스스로 풀어낸 bfs 풀이라 꽤나 뿌듯하다.import java.util.*class Solution { var dx = listOf(-1,1,0,0) var dy = listOf(0,0,-1,1) var n = 0 var m = 0 var checkLaver..

알고리즘 2024.08.12

프로그래머스 - 카드뭉치

goal 에 있는 내용들을 card1 과 card2 에 있는지 각각 index를 늘려가며 순서대로 찾아보고찾을때마다 complete 라는 값의 카운트를 증가시켜준다.모든 작업을 완료하고나서 goal 의 사이즈와 complete의 카운트가 같다면 조건에 맞게 문자열을 만들 수 있다는것이 된다. class Solution { fun solution(cards1: Array, cards2: Array, goal: Array): String { var answer: String = "" var card1Index = 0 var card2Index = 0 var complete = 0 goal.forEach{ i..

알고리즘 2024.08.12

[다시 만들어보는 클린아키텍쳐] 모듈구성 편

밑작업이 끝이 났다면 이제 모듈을 구성해봐야한다.아직 만들고 있는 샘플 프로젝트는 모듈구성을 대략적으로 해뒀지만 완성된건 아니라계속 바뀌는 중이다. 그러니 대충 일반적인 상황을 가정하고 설명을 해보겠다. 일단 클린아키텍쳐의 개념에 따르는 모듈 구성은 알고자한다면 그 개념부터 다시 알고 넘어가야한다.사실 예전에 포스팅한게 있어서 첨부한다 ㅎhttps://choi-dev.tistory.com/158 안드로이드 클린 아키텍쳐에 대해개발에 관심을 가지고 있는 사람이라면 클린 아키텍쳐라는 말을 한번 쯤 들어 봤을거라고 생각한다. 나도 개념에 대해서는 어럼풋이 알고 있었지만 흉내만 낼뿐 원칙을 완벽하게 지킨다거나 하choi-dev.tistory.com 핵심은 계층분리다.영역을 역할에 따라 분리하고간섭을 최소화하여 ..

Android 2024.08.12

프로그래머스 - 대충 만든 자판

여러번을 눌러도 결국 필요한건 가장 적게 누르고 어떤 문자를 만들 수 있다는 정보가 가장 중요하다.그래서 map 에다가 이미 저장된 key가 있다면 어떤게 더 적게 만들 수 있는 상황인지 체크해서 다시 저장해준다. 그리고 뒤에 헷갈렸던 부분은 여러문자열중 하나만이라도 만들 수 없다면 기존의 count 는 다 무시되고 -1 로 만들어줘야한다. 이 부분을 빠뜨려서 헤맸다.import java.util.*class Solution { fun solution(keymap: Array, targets: Array): IntArray { var answer = mutableListOf() var map = mutableListOf>() var count = mutableM..

알고리즘 2024.08.11

[다시 만들어보는 클린아키텍쳐] build-logic 편

build-logic 도 이전 포스팅에 있었던 모듈의 하나다.다만 이 모듈에는 Version Catalog, Convention Plugin 이라는 개념을 추가해서 설명할것이다. Version Catalog는 이름에서 느껴지는것처럼 버전을 관리해준다. 즉 프로젝트 전반에 있는 라이브러리 의존성을 관리하는 방식이다.libs.versions.tomi 라는 파일이 있을텐데 요놈이 그 역할을 한다.알아본김에 좀 더 알아보자.이 파일을 열어보면 크게 네 파트로 나뉘는데 [versions][libraries][plugins][bundles]가 있다. versions : 라이브러리의 버전을 정의한다. ex) glide = 5.0.0libaries : 해당 라이브러리 정보를 적는다. ( group : name : ve..

Android 2024.07.31

[다시 만들어보는 클린아키텍쳐] 모듈분리 편

클린아키텍쳐가 유행한지도 이제 꽤 시간이 지난 것 같다.하지만 여전히 현업에서도 많이 쓰이고 있고 시간이 흐를수록 더 관리하기 편하고깔끔한 구조로 변화해가는듯하다. 최근에 보이는 nowinandroid 나 드로이드나이츠 앱을 참고하며 내가 필요한 부분만 취해서새롭게 샘플앱을 구성해보려한다. 단발성으로 끝나는것이 아닌 지속적으로 몇년이고 업데이트 할 사항이 생긴다면추가하고 리펙토링도 진행하며 관리해나갈 목적으로 레포를 만들었다. 그럼 프로젝트를 구성하는 첫번째 발걸음인 모듈 분리를 해보자.참고로 클린아키텍쳐라고 꼭 모듈을 분리해야하는건 아니다.다만 분리를 하면 좀 더 강력하게 코드 관심사를 분리 시킬 수 있다.초기에 설정해야하는 일들이 꽤나 복잡하지만 해두고나면 코드를 보기에도 훨씬 편하다. 모듈분리 모듈..

Android 2024.07.25

다시 프로젝트를 해보자.

요즘 계속 잡담글만 올라오는 기분이지만..빨리 이직을 해야겠다는 생각에 정신없이 서류, 이력서, 알고리즘 공부에만 신경을 썼던거 같다.물론 다 중요하지만 근본적으론 내가 안드로이드 개발을 잘해야하고이걸 쉬고 있을수는 없다. 요즘은 컴포즈로 앱을 전부 짜고 있는데 기능 개발에는 문제 없지만아직도 리컴포지션 최적화는 알듯하면서도 쉽지않다. 꾸준한 노력만이 답일듯하다.  전에 만들었던 Linkzip 은 앱을 올리고 싶은데개발자 계정을 새로 만들면서 본인인증을 하란다원래 없었던거 같은데 생겼나보다..제출 해야하는 서류가 제약 조건이 좀 귀찮아서 아직 내질 못했다.이것도 얼른 출시해야지 휴휴 아! 그리고 요즘에는 오프라인 기기 제작도 해보려고 하고 있다.나는 연동되는 앱을 담당하겠지만 친하게 지내는 분중에 하드웨..

잡담 2024.07.24