전체 글 234

프로그래머스 - 햄버거 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 처음에 문제가 무슨 말인지 이해를 못했다.결국 핵심은 햄버거는  빵-야채-고기-빵  으로 순서가 주어질때만 햄버거로 만들 수 있고햄버거로 만들어지면 기존 재료 list 에서는 빼줘야한다는거다.그렇게 햄버거를 몇개까지 만들 수 있냐는 문제인데 결국 빵-야채-고기-빵 이라는 하나의 패턴이 재료 list에 있는 문제라고 생각했고처음에는 아래처럼 풀었다.class Solution { fun solut..

알고리즘 2024.08.21

프로그래머스 - 푸드 파이트 대회

https://school.programmers.co.kr/learn/courses/30/lessons/134240 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 설명은 길지만 결과 문자열 중간에는 물을 의미하는 "0" 이 무조건 와야하고왼쪽에서 먹기 시작하는 사람 , 오른쪽에서 먹기 시작하는 사람이 동일하게 음식을 먹어야하기 때문에문자열은 좌우 대칭이 되어야한다. 좌우대칭이 되려면 음식은 짝수개로만 쓸 수 있는데 주어진 음식이 홀수개인 경우는 (food[i] / 2).toInt() 2로 나누고 정수형으로 변경해줬다.이렇게 하면 음식이 1번 음식이 3개 ..

알고리즘 2024.08.21

Android Compose 의 @Immutable 와 @Stable

Jetpack Compose에서 @Immutable와 @Stable 어노테이션은 컴포저블 함수의 리컴포지션을 최적화하는 데 중요한 역할을 합니다. 각각의 어노테이션은 특정한 상황에서 사용되며, 사용하는 것과 사용하지 않는 것에 따라 성능에 미치는 영향이 달라집니다.1. @Immutable@Immutable 어노테이션은 클래스가 불변(immutable)임을 명시합니다. 불변 객체는 상태가 변경되지 않기 때문에, Jetpack Compose는 해당 객체가 변경되지 않는다고 가정하고 리컴포지션을 피할 수 있습니다.언제 사용할까?@Immutable은 객체가 불변이며, 내부의 모든 필드도 불변 객체일 때 사용합니다. 이는 데이터 클래스와 같은 경우에 자주 사용됩니다.예시:@Immutable data class U..

프로그래머스 - 과일장수

문제 설명과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다.한 상자에 사과를 m개씩 담아 포장합니다.상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다.과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다)예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 이익을 얻..

알고리즘 2024.08.20

프로그래머스 - 기사단원의 무기

https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 자체는 간단하다.천천히 읽으면 무슨 말인지 이해하는데 어렵지 않다. 이 문제의 핵심은 아래인데각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한수치보다 큰 공격력을 가진 무기를 구매해야 하는 기사는 협약기관에서 정한 공격력을 가지는 무기를 구매해야 합니다. 예를 들어, 15번으로 지정된 기사..

알고리즘 2024.08.19

안드로이드 샘플 프로젝트

https://github.com/supremehyo/SampleCleanArchitecture GitHub - supremehyo/SampleCleanArchitecture: 안드로이드 샘플앱을 위한 레포입니다. 더 좋은 방법이 생길때안드로이드 샘플앱을 위한 레포입니다. 더 좋은 방법이 생길때마다 꾸준히 업데이트 될 예정입니다. - supremehyo/SampleCleanArchitecturegithub.com최근에 만들고 있는 샘플 프로젝트가 있다.관련해서 다른 포스트에서도 언급을 했었던거 같은데 암튼. 예전에 했던 사이드 프로젝트들을 쭉 돌아보는데 정리도 잘안되고 지금와서 모든 프로젝트들을내가 만족할만한대로 다 수정하기에는 너무 어지러워서몇년이고 꾸준히 업데이트 해볼 프로젝트를 진행하기로 했다. 기..

프로그래머스 - 귤고르기

문제 설명경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로..

알고리즘 2024.08.18

프로그래머스 - 명예의 전당(1)

문제 설명은 길지만 가수의 점수가 들어올때마다 소팅해주고명예의 전당에 포함되는 k번째 숫자를 기준으로그보다 작을때는 소팅된 리스트의 가장 마지막 숫자,그보다 클때는 소팅된 리스트의 k-1 번째 값을 발표점수 리스트에 추가해주면 된다. class Solution { fun solution(k: Int, score: IntArray): IntArray { var answer = mutableListOf() var list = mutableListOf() score.forEach{ list.add(it) list = list.sorted().reversed().toMutableList() if(..

알고리즘 2024.08.18

프로그래머스 - 문자열 나누기

https://school.programmers.co.kr/learn/courses/30/lessons/140108 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 설명 그대로 문자의 요소들을 카운트해가며 비교하고 x와 같은 문자를 센 카운트와 x와 다른 문자를 센 카운트가 같아질때문자열을 자르고 그때마다 비교 기준이 되는 x 라는 문자를 갱신해주면 된다. class Solution { fun solution(s: String): Int { var answer: Int = 0 var str = s while (str...

알고리즘 2024.08.17

코루틴의 Dispatcher 를 Hilt Singleton으로 주입해보자

구글의 Codelab의 예제나 안드로이드 공식 문서, 블로그의 코루틴 예시들을 보면 아래의 코드처럼 새로운 코루틴을 생성하거나 withContext를 호출할 때 Dispatchers를 하드코딩하는 경우를 많이 찾아볼 수 있습니다. 하지만 Android의 코루틴 권장사항 문서를 보면 Don't hardcode Dispatchers when creating new coroutines 라는 내용이 제일 먼저 등장합니다.// DO inject Dispatchersclass NewsRepository( private val defaultDispatcher: CoroutineDispatcher = Dispatchers.Default) { suspend fun loadNews() = withContext(..

Android 2024.08.17