전체 글 244

프로그래머스 - 크기가 작은 부분 문자열

문자열 처리 문제다.어려울건 없지만 처음에 substring 으로 만든 문자열들을list에 담고 거기서 filter 처리해서 size 를 만들고 하는 불필요한 작업들도 있고잘라낸 문자열을 toInt()로 처리했는데주어진 조건의 p가 18자리까지도 될 수 있어서 int로는 표현할 수 없어서 런타임에러가 발생하는 케이스가 있었다. 그래서 불필요한 작업을 없애고 toLong으로 변환해서 비교하는 코드로 변경했다. import java.util.*class Solution { fun solution(t: String, p: String): Int { var answer: Int = 0 var size = p.length var list = mutableListOf() ..

알고리즘 2024.08.14

프로그래머스 - 숫자 변환하기

언어 : Kotlin x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요.  라는 문제다 최소 연산 횟수니까 bfs 를 선택하는게 맞았지만처음에는 dfs 로 풀면 풀릴거 같은데? 라고 생각하고 풀었다.결과는 시간초과 나는 케이스가 있어서 실패.아래는 bfs 풀이다.내용 자체는 단순해서 bfs에 대해서 이해하고 있다면 풀이가 어렵진 않다.import java.util.LinkedListimport java.util.Queuelateinit var answer: ArrayListlateinit var queue: Queue>lateinit var visited: HashMapclass Solution { fun solution(x: Int, y: In..

알고리즘 2024.08.14

프로그래머스 - 미로탈출

최대한 빠르게 미로를 탈출하는데 걸리는 시간을 구해야한다.즉 최단거리를 구하는 문제라서 나는 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