분류 전체보기 (159) 썸네일형 리스트형 [Android] SharedFlow 사용 시, 늦게 생성된 View에서의 초기 값 문제 📝 문제 발생 LiveData를 StateFlow와 SharedFlow로 리팩터링 하던 도중, 사소한 문제가 생겼다. 특정 SharedViewModel의 LiveData를 Observe 해서 UI에 반영하는 코드가 있었는데, 리팩터링 이후 초기 값을 제대로 불러오지 못하는 문제였다. 해당 Fragment 탭을 눌러서 그 Fragment가 생성된 이후에, SharedFlow로 방출되는 event들은 제대로 반영이 되고 있으나, 초기값은 의도한 대로(가장 마지막 event를 이용해 초기화) 동작하지 않았다. 그래서 해당 SharedFlow를 collect하는 블럭에 Log를 찍어서 확인해 봤는데, View의 초기화 시점에는 해당 블럭이 트리거되지 않고 있었다. 📌 다양한 비동기 스트림과 문제 원.. [TIL] 24.05.02 알고리즘 1. 알고리즘 문제 해결 변신 이동 게임(백준 15906): 흔한 조건 몇 개 걸린 BFS 문제인 것 처럼 보였다. 결론부터 말하자면 그렇게 풀긴 했지만, 아마 A* 알고리즘을 적용했으면 더 널널하게 통과하지 않았을까싶다. 격자의 최대 크기가 500*500으로 작았기 때문에 BFS로 접근했는데, 일단 당연하게도 방문 정보를 저장할 때는 단순하게 방문여부만 저장해서는 안된다. 일반 모드일 때와 변신 모드일 때로 나누어 저장해야 하고, 이전까지 있었던 방문 비용 최소치를 담아두기로 했다. 처음 작성했던 탐색과정은 이랬다. - 큐의 front를 확인한다.- 상태에 맞게 isVisited와 비교해서 값이 크거나 같다면 continue- isVisited 갱신해 준 뒤에, 목적지에 도달했어도 continue.. [TIL] 24.05.01 알고리즘, 몇 가지 질의응답 1. 알고리즘 문제 해결 카드 팩 구매하기(백준 15823): 푸느라 꽤 애를 먹었다. 각 카드 팩을 구성하는 카드 수가 1~N 장이 될 수 있고, 해당 장 수의 카드팩으로 구성할 수 있는지 확인하는 데에도 O(N)만큼 걸리기 때문에 모든 경우를 탐색하면 시간복잡도가 O(N^2)에 달한다. 이려면 N이 최대 100,000까지 입력될 수 있으므로, 제한시간을 아득하게 넘을 것이다. 일단 주어진 카드 배열에 대해 x장짜리 카드팩 m개가 성립가능한지 확인하는 것은, 투 포인터나 슬라이딩 윈도우 방식으로 구해내면 O(n)에 해당하고 이보다 더 줄일 수는 없을 것 같았다. 그렇다면 저 x의 범위를 줄여야 하는데, 처음에는 DP로 접근했지만 마땅한 점화식이 떠오르지 않았다. 하지만 계속 DP로 접근하려고 시도하.. [TIL] 24.04.30 앱 개발 숙련 주차 팀 프로젝트 회고 저번 주는 내내 팀 프로젝트를 진행했고, TIL을 거의 작성하지 못했다. 그래서 과정부터 소감까지 한 번에 결산 회고로 작성하기로 했다. 📝진행과정 이번에 구현할 앱은 연락처 앱이었고, 각 화면 별로 몇 가지 상세한 요구사항을 염두에 둔 채로 인원을 배분했다. 와이어 프레임을 대강 작성해 두고, 일단 필수 기능들부터 나누어서 작업하기로 했다. 위의 붉은 사각형으로 하이라이트 된 부분이 처음 계획했던 팀 플랜이다. 수요일까지 필수 기능을 구현해서 PR을 진행하고, 목요일에 코드 리뷰 및 리팩터링을 마무리해 병합 후 추가할 기능을 선정해 금요일까지 마무리할 요량이었다. 물론, 계획대로 흘러가지 만은 않았는데, 이번 프로젝트는 우여곡절이 좀 있었다. 일단 이 캠프에는 아직 숙련도가 부족해서, 본인.. [TIL] 24.04.25 RecyclerView 아이템 내의 Switch 일관성 문제 1. RecyclerView 아이템 내의 Switch 일관성 문제 RecyclerView를 사용하다 보면, View의 재활용 과정에서 의도하지 않은 속성값 찌꺼기가 남아있는 일들이 생긴다. 물론 일반적인 TextView의 text 등의 경우, 직접 상태값을 바인드하게 되니까 별 문제가 발생하지 않지만, 문제는 여러 상태 값을 가진 객체나 리스너 등을 이용하는 경우다. 이번에 챌린지반 과제를 하면서, 아래처럼 Switch 위젯을 이용해 북마크 토글을 만들었는데 여기서 문제가 생겼다. 로직은 심플한데, 일단 각각의 Switch에 대해 OnCheckedChangeListener를 달아서 Switch의 상태 값이 변경되면 어댑터에서 받아온 콜백을 부른다. 이 콜백은 Fragment에서 주입 받은 것으로 V.. [TIL]24.04.19 알고리즘, 기타 1. 알고리즘 문제 해결 인공지능 테트리스 (Large) (백준 14599): 핵심은 시뮬레이션 구현이었고, 그 내부에서 BFS/DFS나 그리디 등을 사용할 수 있는 문제였다. 아무래도 구현이 주가 되는 문제이다 보니 로직 자체는 심플하다. 대신에 세심하게 체크하지 않으면 놓치기 쉬운 부분이 많다. 나도 그래서 3번 정도의 시행착오를 거쳐야 했다. 로직은 문제 그대로 구현하면 된다. 각 종류별 테트로미노들이 회전 없이 내려갈 때, 테트로미노 하나만을 이용해 제거할 수 있는 최대 줄 수를 구하면 된다. 나 같은 경우에는, 먼저 테트로미노들을 표현할 수 있게 각각의 회전케이스들을 포함해 미리 구현했다. 한 점을 기준으로 테트로미노를 가장 좌측 상단 구석까지 당겨 붙인다고 생각한 뒤에, 테트로미노를 구성하는 .. [TIL] 24.04.18 알고리즘 1. 알고리즘 문제 해결 2x2x2 큐브(백준 16939): 단순 구현 문제. 이건 사실 왜 골드2로 책정된건지 조금 의아했다. 잘쳐줘도 실버 하위정도의 난이도를 가진 문제같은데.. 한 번 돌려서 풀 수 있는지를 묻고 있기 때문에, 단순 구현으로 빠르게 처리할 수 있다. 각 축에 대해 한 쪽을 시계방향으로 회전하는 경우와 반시계방향으로 회전하는 경우, 그래서 따져봐야하는 경우는 6가지이다. 축 별로 한쪽 방향 회전을 만들어둔 후, 세 번 반복하면 반대쪽 방향 회전한 결과와 같기 때문에 그걸 이용해서 풀어도 되지만, 그렇게 하려면 각 칸 배열의 수들을 옮기는 회전 함수를 이용해야 한다. 하지만 굳이 배열에 매번 바뀌는 값을 assign해서 상태를 검사하는 것보단, 단순하게 6가지 케이스들은 초기 배열을 이.. [Android] Kotlin DSL 이용 시, API Key 은닉하기(AGP 9.0 미만) 흔히 토이 프로젝트 등을 할 때 api 키와 같은 정보를 local.properties에 은닉하곤 하는데 groovy를 사용할 때와 소소한 차이가 있어서, 오랜만에 작성하면 낯설게 느껴진다. 이번 기회에 글로 남기면서 정리하려고 한다. 1. local.properties에 키 값 작성하기 local.properties에 키 값을 이름=문자열 꼴로 작성한다. 당연히 이 파일은 형상 관리 시스템에서 제외되어야 한다. 2. 앱 수준 build.gradle에서 Properties 객체 생성 후, local.properties 파일 불러오기 사실 파일이 존재하는지 한번 확인하면 더 견고한 프로그램이 될 것 같다. 3. buildConfig에 등록하기 defaultConfig에서 지정하긴 했지만, 당연히 build.. 이전 1 ··· 8 9 10 11 12 13 14 ··· 20 다음