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

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

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

 

 

코드카타 문제풀이

나무 자르기(Silver 2, 2805번)

문제 내용

 

문제 풀이 방법

나무의 개수(N)와 가져가고자 하는 나무의 길이(M)가 주어질 때, M미터의 나무를 가져가기 위해 나무를 자를 수 있는 높이의 최댓값을 출력.

 

 

해결 코드(스포 주의)

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

private var needTree = 0L
private var treeList = listOf<Long>()

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val treeInfo = readLine().split(" ").map { it.toLong() }
    needTree = treeInfo[1]
    treeList = readLine().split(" ").map { it.toLong() }

    binarySearch(1L, treeList.max())
}

private fun binarySearch(start: Long, end: Long) {
    if (start > end) {
        var resultCnt = 0L
        for (i in treeList.indices) {
            if (treeList[i] >= start)
                resultCnt += treeList[i] - start
        }

        if (resultCnt < needTree) println(end)
        else println(start)

        return
    }

    val mid: Long = (start + end) / 2
    var remain = 0L
    for (i in treeList.indices) {
        if (treeList[i] >= mid)
            remain += treeList[i] - mid
    }

    if (remain >= needTree) {
        binarySearch(mid + 1, end)
    } else {
        binarySearch(start, mid - 1)
    }
}

 

풀이 과정

필요한 나무의 미터를 저장할 needTree, 나무의 높이를 저장할 treeList를 생성한다.

needTree를 입력받은 값(treeInfo)의 1번째 index로 초기화한다.

binarySearch()를 실행한다.

 

binarySearch()에서 start와 end값을 이용해 mid를 구해준다. mid가 잘리는 높이가 된다.(mid가 7일 때 높이가 8m인 나무를 자르면 1m가 남게 된다)

treeList와 mid를 이용해 자르고 난 후의 남은 나무의 값(remain)을 구한다.

remain과 needTree의 값의 대소에 따라 이분 탐색 범위를 재설정 후 재귀 호출한다.

start가 end보다 커지면 탐색이 종료되었다는 뜻이다.

조건을 만족하면 마지막으로 start를 기준으로 자르고 남은 나무의 값(resultCnt)을 구한 후 needTree보다 크면 정답이 아니기 때문에 start보다 1 더 큰 end를 출력하고 아니면 start를 출력.

 

 

문제 해결 과정

그냥 int로는 해결할 수 없는 문제이다. 2%에서 입구컷 당함.

처음 입력받을 때부터 long으로 입력받는 게 더 구현하기 편할 듯.

 

 

팀 프로젝트 회의

팀 프로젝트 아이디어 구성 및 역할 분담.

활동 내용 간단 정리

팀 프로젝트 sns 만들기의 아이디어는 자신이 좋아하는 카페 메뉴를 소개하는 앱으로 개발하기로 결정.

각자 구현할 필수 기능들(화면)을 팀원끼리 정함. 나는 마이 페이지를 담당함.

팀 프로젝트에 필요한 문서들을 생성(github, figma)

github는 내가 팀장이라 초기 세팅을 해줌.

 

 

팀 프로젝트 피그마 디자인 구현.

활동 내용 간단 정리

팀원들끼리 각자 구현할 페이지를 figma로 디자인을 제작함.

디자인 경험이 있는 팀원분이 다른 팀원(나 포함)들의 디자인을 깔끔하게 다듬어 주었음.

최종 디자인 결과

 

개인 공부

팀 프로젝트 마이페이지 UI 구성.

공부 내용 간단 정리

팀 프로젝트 회의 때 정했던 역할을 바탕으로 마이 페이지의 UI를 구현했다.

 


 

오늘 공부 내용 정리 및 회고

오늘부터 팀 프로젝트 기간이 시작되었다.

오늘 UI를 구현했으니까 내일까지 기능 구현을 끝내 보겠다.

팀 프로젝트를 완료할 때까지 알고리즘 쪽은 소홀해질 예정이다.

728x90

댓글