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

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

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

 

 

코드카타 문제풀이

수면 패턴(마라톤 문제, Bronze 1, 19843번)

문제 내용

 

문제 풀이 방법

수면 횟수만큼 수면 시작일, 시간과 수면 종료일 시간이 주어졌을 때, 수면 시간을 구해서 모두 더한 값이 주말에 풀로 잘 수 있는 시간(48시간) 보다 크다면 -1을 출력, 충분히 잠을 잔 경우에는 0을, 그 이외의 경우는 주말에 자야 하는 시간을 출력한다.

 

 

해결 코드(스포 주의)

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

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val (sleepHour, case) = readLine().split(" ").map { it.toInt() }

    var sleep = 0
    for (i in 0 until case) {
        val input = readLine().split(" ")
        val sleepStart = input[1].toInt()
        val sleepEnd = input[3].toInt()

        val sleepStartDayCode = parseDayCode(input[0])
        val sleepEndDayCode = parseDayCode(input[2])

        // 2일 이상 자는 경우를 대비해 수면 종료일과 수면 시작일의 차이에 24를 곱해 추가적인 수면 시간을 체크한다.
        sleep += sleepEnd - sleepStart + (sleepEndDayCode-sleepStartDayCode) * 24
    }

    // 잠을 충분히 잔 경우 음수가 나옴.
    if (sleepHour - sleep < 0) println(0)
    // 주말에 충분히 잘 수 있으면 출력
    else if (sleepHour - sleep <= 48) println(sleepHour - sleep)
    // 주말에 풀로 자도 부족한 경우.
    else println(-1)
}

// 날짜를 숫자 코드로 변환함.
private fun parseDayCode(day: String): Int {
    return when (day) {
        "Mon" -> 1
        "Tue" -> 2
        "Wed" -> 3
        "Thu" -> 4
        "Fri" -> 5
        else -> 0
    }
}

 

풀이 과정

수면 시작(sleepStart) 시간과 종료 시간(sleepEnd)을 정의하고, 수면 시작일(sleepStartDayCode)과 종료일(sleepEndDayCode)은 parseDayCode() 함수를 통해 날짜 String을 나만의 날짜 코드로 변환해서 저장한다. 각 케이스마다 수면 날짜의 차이를 구하는 것은 int가 아무래도 더 쉽기 때문이다.

이제 총 수면 시간(sleep)에 sleepEnd - sleepStart를 해주고 날짜의 차이를 계산하기 위해 (sleepEndDayCode - sleepStartDayCode) * 24를 해준다. 수면 종료 시간과 날짜가 시작 시간보다 더 이른 때일 경우는 절대 없기 때문이다.

총 수면 시간을 구했으면 자야 하는 수면 시간(sleepHour)에 총 수면 시간을 뺀 값이 뭐냐에 따라 출력을 다르게 해야 한다.

뺀 결과가 0보다 작은 경우는 잠을 충분히 자서 주말에 잘 필요가 없다는 뜻이므로 0을 출력,

뺀 결과가 48보다 작거나 같은 경우는 주말에 자서 수면 시간을 확보할 수 있으므로 뺀 값을 출력하고,

뺀 결과가 48보다 큰 경우는 주말에 풀타임으로 자도 수면 시간이 부족하므로 -1을 출력한다.

 

 

문제 해결 과정

2일 이상 자는 경우를 대비하지 않으면 틀린다. 처음에는 고려하지 않고 작성했지만 나중에 그 이유를 깨닫게 되었다.

 

개인 공부

알고리즘 그래프 이론 공부

공부 내용 간단 정리

현재 이론 공부 후 코드 작성 중이다 그래서 블로그 포스팅은 내일 올려보겠다.

 


 

오늘 공부 내용 정리 및 회고

하루 종일 알고리즘 공부만 한 날이다.

트리를 공부하려 했으나, 그래프 이론 먼저 공부해야겠다고 생각하고 그래프부터 공부하는 중이다.

그래프 이론을 공부하면서, 그래프 탐색 알고리즘 DFS, BFS 알고리즘을 공부하고 있다.

현재 그래프 탐색 알고리즘 이론은 알았으나, 코드 구현에서 애를 먹고 있다.

내일 더 자세히 공부해 포스팅을 올려보겠다.

728x90

댓글