본문 바로가기
♞ | 공부일지/♝ | TIL

[Android, 내일배움캠프] 공부일지(2024-07-15)

by immgga 2024. 7. 15.
오늘 공부한 내용 정리(2024년 7월 15일)

 

출처: unsplash.com

 

코드카타 문제풀이

요세푸스 문제 3(Platinum 5, 11025번)

문제 내용

 

문제 풀이 방법

N과 K의 요세푸스 순열에서 마지막에 남는 수를 출력.

메모리 제한이 16MB로 작기 때문에 배열(리스트)을 쓸 수가 없다.

 

 

해결 코드(스포 주의)

더보기
import java.io.BufferedReader
import java.io.InputStreamReader

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (n, k) = readLine().split(" ").map { it.toInt() }
    var data = 1

    for (i in 1 .. n) {
        data = (data + k - 1) % i + 1
    }

    println(data)
}

 

풀이 과정

n과 k를 입력받는다.

초기의 데이터를 1로 설정하고 반복을 1부터 n까지 돌도록 수행한다.

 

데이터 값을 위 수식을 대입해 갱신시킨다.

data에 1을 넣은 이유는 반복문을 돌면서 i, k의 요세푸스 순열의 마지막 번째의 수를 구하기 위함이다.

초기의 1은 1과 k의 요세푸스 순열의 마지막 값을 저장한 것이다.

어차피 순열이 1밖에 없기 때문에 고정적으로 값이 1이다.

 

그리고 DP를 활용해서 풀어 준다.

이전 i의 요세푸스 순열의 마지막 값을 이용해서 값을 구해주었다.

요세푸스 문제에 대한 자세한 설명은 아래 링크에 있다.

https://namu.wiki/w/%EC%9A%94%EC%84%B8%ED%91%B8%EC%8A%A4%20%EB%AC%B8%EC%A0%9C#s-3.2.1

 

요세푸스 문제

유대인 역사가 플라비우스 요세푸스 가 겪은 경험을 바탕으로 만들어진 문제이다. 당시 예루살렘 에서 살았던 요세푸

namu.wiki

 

반복을 종료하고 나면 n, k의 요세푸스 순열의 마지막 값을 구할 수 있을 것이다.

 

 

문제 해결 과정

DP를 이용해서 문제를 해결해야 한다.

메모리 제한을 고려해서 배열을 쓰지 않고 풀어야 한다.

수학적으로 접근해서 문제를 해결할 수도 있다고 했지만 나는 아직 그 방법은 잘 모르겠다.

 

 

개인 과제

앱 개발 숙련 선택 과제 Lv.2

ListAdapter 적용

선택 과제 Lv.2의 구현 내용은 아이템을 길게 클릭했을 때, 삭제 여부를 묻는 AlertDialog를 띄우고, 확인을 누르면 삭제하고 그렇지 않으면 삭제하지 않도록 하는 기능을 구현하는 것이다.

나는 데이터 삭제를 구현하기 위해 ListAdapter를 쓰기로 했다.

ListAdapter 적용은 오늘 작성한 블로그를 참고하자.

https://rkdrkd-history.tistory.com/149

 

[Android, Kotlin] RecyclerView를 ListAdapter를 이용해 효율적으로 사용하기

이번 포스팅에는 내일배움캠프에서 공부하면서 알게 된 ListAdapter를 사용하면서 알게 된 ListAdapter를 이용해 RecyclerView를 구현한 예제를 사용법과 함께 적어보겠다.사실 금요일 특강을 전부 듣지

rkdrkd-history.tistory.com

 

Dialog 띄우기

ListAdapter 안에서 dialog를 띄워 주었다.

Dialog의 확인 버튼을 클릭하면 클릭된 item의 id와 같은 id를 가진 데이터를 삭제하도록 하고 ListAdapter에 재적용을 해주었다.

코드는 넣으면 너무 길어지기 때문에 생략하겠다.

 

 

수준별 학습반 개인 과제 v0.2

TabLayout, Bottom Navigation, Fragment를 이용해 새롭게 Navigation 구성

이번의 수준별 학습반 개인 과제는 이전에 만든 클론 앱을 더 업그레이드시키는 것이다.

크게 보자면 이전의 더미 데이터들을 모두 RecyclerView로 갈아주면 된다.

하지만 나는 이번에 가는 김에 크게 한 번 갈아보고자 해서 TabLayout과 BottomNavigation, Fragment를 적용해 주기로 했다.

 

우선 Bottom Navigation을 적용해 주었다.

Bottom Navigation에 들어갈 탭이 총 4가지이므로, 4개의 Fragment를 준비해 주고, TabLayout에는 6개의 Fragment가 필요하지만, 나는 추천, 인기 차트 탭만 구현할 예정이기 때문에 2개의 Fragment에다가 빈 Fragment 한 개 해서 3개만 생성해 주었다.

대략적인 구조는 MainActivity에 BottomNavigation을 적용하는 코드를 작성해 주고,

GameFragment(게임 탭)에서 TabLayout을 적용하는 코드를 작성해 주었다.

이번에도 역시 코드는 생략.

 


 

오늘 공부 내용 정리 및 회고

이제는 개인 과제도 끝냈으니, 수준별 학습반 과제를 본격적으로 시작할 예정이다

오늘은 Navigation 쪽을 구현했으니, 이제 내일부터는 기능 구현을 시작할 것이다.

이전과는 달라진 앱을 만들 것이다.

728x90