전체 글

I’m currently learning Android, ComputerScience, Algorithm and etc....
BaekJoon

[BaekJoon] 13023번 ABCDE (Java) 문제 풀이 [Gold 5]

문제 https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 어떻게 풀 것인가? DFS를 이용한 간단한 문제 풀이였다. 그래서는 이중연결리스트를 이용하여 연결된 친구사이를 표현한 뒤에 재귀를 이용한 DFS로 문제를 풀었으며 DFS를 통해서 노드를 쭉쭉 연결해 나아갔을때 status변수를 이용하여 만약 깊이가 5라면 true 그것이 아니라면 false를 반환하는 식으로 문제를 해결했다. 풀면서 놓쳤던점 그래프 탐색이라고 하면 항상 BFS만 이용하였기에 DFS는 익숙하지 않아서 애를 많이 먹었다. 이 문제를 통해 얻어갈 것 재귀를 이용한 DFS 문제 풀이 내 ..

Programming Language/Kotlin

[Kotlin] Flow Builder를 사용하여 Flow 만들어보기

저번 포스팅에 대한 보충 내용 https://superohinsung.tistory.com/318 [Kotlin] Kotlin에서 Flow Api 코틀린 Flow Api에 대해서 공부를 해보자. Kotlin Flow Api란 비동기적인 연산을 처리하기 위한 새로운 프로그래밍 모델을 제공하는 Kotlin의 라이브러리이다. Flow는 비동기적인 작업을 쉽게 처리하고 superohinsung.tistory.com 한 위치에서 다른 위치로 파일 이동 여기서는 백그라운드 스레드의 한 위치에서 다른 위치로 파일을 이동하기 위해 Flow Builder를 사용하여 흐름을 생성하고 메인 스레드에서 완료 상태를 보낸다. val moveFileflow = flow { // move file on background thre..

Programming Language/Kotlin

[Kotlin] Kotlin에서 Flow Api

코틀린 Flow Api에 대해서 공부를 해보자. Kotlin Flow Api란 비동기적인 연산을 처리하기 위한 새로운 프로그래밍 모델을 제공하는 Kotlin의 라이브러리이다. Flow는 비동기적인 작업을 쉽게 처리하고 조절할 수 있도록 설계되었으며, 주로 비동기 스트림(Asynchronous Streams)을 다루는데 사용된다. Flow API의 핵심 개념은 데이터의 비동기적인 흐름(Flow)을 나타내는 것이다. Flow는 값을 생성하고 소비하는 비동기적인 프로시저로, 여러 개의 값을 비동기적으로 생산하고 소비할 수 있다. 이는 코루틴과 함께 사용되어 비동기 코드를 더 간결하게 만들고 복잡성을 줄일 수 있다. Flow의 주요 구성 요소 Flow Builder 작업을 수행하고 아이템을 방출하는데 도움이 된..

Programming Language/Kotlin

[Kotlin] Kotlin Coroutines에서 Launch 와 Async

오늘은 Kotlin Coroutines에서 Launch 와 Async에 대해서 알아보자. launch와 async는 모두 Kotlin에서 코루틴을 시작하는 기능이다. 차이점은 launch는 실행하면 결과 값을 전달하지 않는 반면 , async는 반환 결과 를 얻기 위해 Java에서 future를 사용하는 것처럼 코루틴의 결과를 반환하는 함수가 Deferred있는 의 인스턴스를 반환한다는 것이다. Launch val job = GlobalScope.launch(Dispatchers.Default) { // do something and do not return result } 작업 상태를 가져오거나 취소하는 데 사용할 수 있는 작업 개체를 반환한다. 위의 실행 예에서 우리는 무언가를 해야 하고 결과를 반환..

Android/Study

[Android] abstract class를 이용하여 ViewBinding을 쉽게 사용하기

지난 프로젝트에 대한 회상 겸 정리할 겸 작성을 해보았다. (물론 너무 오랜 시간이 지나긴했지만...) 프로젝트를 진행하였을 때 ViewBinding을 일일히 Activity마다 혹은 Fragment마다 설정하는 것이 너무나도 귀찮았다. 그래서 추상화 클래스를 이용하여 ViewBindingActivity 그리고 ViewBindingFragment을 개발하였다. 결과적으로 효율적으로 ViewBinding을 사용할 수 있었으며, 문제가 생긴다면 위 2 클래스를 확인하면 되는 효율적임이 생겼다. 우선 ViewBinding이란 아래 포스팅 링크를 남기겠다. https://superohinsung.tistory.com/239 [Android] ViewBinding(뷰 바인딩) 정리 ViewBinding(뷰 바인딩..

Android/Study

[Android] ListAdapter에서 DiffCallBack 정리

블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자 저번에 RecyclerView에 대해서 포스팅을 하였을 때 https://superohinsung.tistory.com/314 [Bong#] RecyclerView에서 onCreateViewHolder와 onBindViewHolder의 차이 블로그에 지난 졸업프로젝트에서 했던 주요 기능부분을 기록으로 남기려고한다. 조금? 오랜 시간이 지났지만 기억을 되살려서 기록을 해보자. 졸업 프로젝트에서는 다른 여타 프로젝트와 달리 superohinsung.tistory.com 아래와 같은 코드를 본 적이 있을 것이다. companion object { private val diffC..

Android/Study

[Android] ComposeUi 도입기

지난 프로젝트에 대한 회상 겸 정리할 겸 작성을 해보았다. (물론 너무 오랜 시간이 지나긴했지만...) 우리가 ComposeUi를 도입한 이유 선언형 프로그래밍: Compose는 선언적인 구문을 사용하므로 UI의 현재 상태를 더 직관적으로 표현할 수 있습니다. XML의 경우 계층적인 구조를 가지기 때문에 UI 구조를 이해하기 어려울 수 있지만, Compose는 코드의 순서대로 UI를 정의하여 가독성을 높입니다. 간편한 실시간 미리보기: Compose는 실시간 미리 보기(Real-time Preview)를 제공하여 UI 변경 사항을 즉시 확인할 수 있습니다. 이는 빠른 반복 및 디자인 작업을 도와줍니다. (XML또한 볼 수는 있지만....) 상태 관리의 편의성: Compose는 내부적으로 상태를 자동으로 ..

Android/Study

[Android] 포스팅 업로드 구현 (4) - Repository

전체 코드 data class PostDto( val uuid: String = "", val writerUuid: String = "", val content: String = "", val imageUrl: String = "", val dateTime: Date = Date() ) @RequiresApi(Build.VERSION_CODES.O) suspend fun uploadPost( content: String, imageUri: Uri ): Result { val currentUser = Firebase.auth.currentUser require(currentUser != null) val db = Firebase.firestore val storageRef = Firebase.storage..

BaekJoon

[BaekJoon] 2589번 보물섬 (Java) 문제 풀이 [Gold 5]

문제 https://www.acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net 어떻게 풀 것인가? 문제는 간단한 BFS 문제이다. 다만 매번 Visit 2차원 배열을 초기화하여 가장 긴 거리를 찾아야한다. 그렇기에 이 부분만 주의하여 푼다면 어렵지않다. 풀면서 놓쳤던점 X 이 문제를 통해 얻어갈 것 기본적인 BFS 풀이 내 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt..

Android/Study

[Android] 포스팅 업로드 구현 (3) - 화면 XML

이번에는 화면 구현 XML에 대해서 리뷰해보자. 사실 크게 어려운 부분은 없다. XML을 통해서 화면을 구현할 때마다 느끼는 것이지만 사실 디자인적인 재능도 있어야하나 싶다.. 전체코드 실제 구현 화면

Android/Study

[Android] 포스팅 업로드 구현 (2) - ViewModel

이번에는 PostCreateViewModel에 대해서 리뷰를 해보자. 전체 코드 class PostCreateViewModel : ViewModel() { private val _uiState = MutableStateFlow(PostCreateUiState()) val uiState = _uiState.asStateFlow() fun selectImage(uri: Uri) { _uiState.update { it.copy(selectedImage = uri) } } fun changeToEditMode() { _uiState.update { it.copy(isCreating = false) } } @RequiresApi(Build.VERSION_CODES.O) fun uploadContent(conte..

Android/Study

[Android] 포스팅 업로드 구현 (1) - Activity

이번에는 포스팅을 업로드하는 PostCreate 부분에 대해서 리뷰를 해보자. 이 기능은 EditTextView 뿐만 아니라 이미지 또한 스마트폰 갤러리에서 선택하여 파이어베이스 저장소에 저장해야 전체코드 class PostCreateActivity : AppCompatActivity() { lateinit var binding: ActivityPostCreateBinding private val viewModel: PostCreateViewModel by viewModels() private val fileChooserContract = registerForActivityResult(ActivityResultContracts.GetContent()) { imageUri -> if (imageUri !=..

Tenacity_Dev
인성의 개발 공부 노트