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

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

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

 

출처: unsplash.com

 

코드카타 문제풀이

과일노리(Silver 5, 14493번, 마라톤)

문제 내용

 

문제 풀이 방법

각각의 확인봇이 A, B로 입력이 주어질 때, A는 확인봇이 나타나는 시간이고, B는 확인봇이 감시하는 시간이다.

모든 확인봇의 감시를 피해 완주할 수 있을 최단 시간을 출력.

 

 

해결 코드(스포 주의)

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

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val case = readLine().toInt()
    var sec = 0

    for (i in 0 until case) {
        val bot = readLine().split(" ").map { it.toInt() }
        val searchTime = bot[1]

        if (sec == 0) {
            sec += searchTime + 1
            continue
        }

        if (sec % bot.sum() >= searchTime) {
            sec++
            continue
        } else {
            val wait = searchTime - (sec % bot.sum())
            sec += wait + 1
        }
    }

    println(sec)
}

 

풀이 과정

알람봇의 개수를 case로 입력받고, 총시간을 계산할 변수(sec)를 생성한다.

case만큼 반복해서 알람봇을 입력받는다.

 

만약 sec가 0이면 첫 번째 알람봇을 지나야 하기 때문에 감시 시간에 + 1을 더해서 넘어간다.

그 외의 경우에는 지난 시간(sec)이 감시 시간에 해당하는지 확인해야 한다.

현재 시간(sec)에 bot이 감시와 휴식을 취하는 시간의 합의 나머지가 searchTime(감시 시간) 보다 크거나 같으면 휴식 시간이므로 1초 안에 지나갈 수 있다. 그래서 sec에 1을 더해주고 넘어간다.

이 조건도 만족하지 못하면 감시 시간이므로 감시 시간에 현재 시간에 bot의 루틴 시간(감시 + 휴식 시간)을 뺀 값을 구해서 남은 봇의 감시 시간을 구할 수 있다.

남은 봇의 감시 시간과 1을 sec에 더해 준다.

 

반복을 종료하고, 최종 sec를 출력한다

 

 

문제 해결 과정

알람봇의 남은 감시 시간을 체크할 수 있도록 공식을 잘 짜야하는 문제이다.

공식을 알기만 하면 어렵지 않은 문제이다.

 

 

비밀번호 찾기(Silver 4, 17219번, 마라톤)

문제 내용

 

문제 풀이 방법

사이트의 이름과 비밀번호가 주어지고 비밀번호를 출력할 사이트가 주어질 때, 해당 사이트의 비밀번호를 출력.

 

 

해결 코드(스포 주의)

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

fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val passwords = mutableMapOf<String, String>()
    val (sites, search) = readLine().split(" ").map { it.toInt() }

    for (i in 0 until sites) {
        val input = readLine().split(" ")
        passwords[input[0]] = input[1]
    }

    for (i in 0 until search) {
        val searchSite = readLine()
        bw.write("${passwords[searchSite]}\n")
    }

    bw.flush()
    bw.close()
}

 

풀이 과정

사이트와 비밀번호를 저장할 map 변수 passwords를 생성한다.

sites(총사이트의 개수), search(검색할 사이트의 개수)를 입력받는다.

 

sites부터 반복해 passwords에 key를 site, value를 비밀번호로 설정해 map에 넣어 준다.

search에서는 map 데이터에서 searchSite에 해당하는 value를 출력한다.

 

 

문제 해결 과정

map을 사용하면 브론즈급으로 쉽다.

이게 실버?

 

 

팀 프로젝트(연락처)

알람 클릭했을 때, 사용자 연락처 정보 Fragment로 데이터 전달하기

활동 내용 간단 정리

만든 알람 로직을 클릭했을 때 MainActivity에서 ContactDetailFragment로 이동하는데, MainActivity에서 ContactDetailFragment로 이동할 때, Bundle로 데이터를 옮길 수 있도록 구현해 주었다.

ContactDetailFragment를 담당하시는 분과 이야기를 진행해서 데이터를 받을 수 있도록 구현할 예정이다.

 


 

오늘 공부 내용 정리 및 회고

팀 프로젝트도 슬슬 마무리되고 있다.

내일 프로젝트를 끝내면 수준별 학습반 과제를 만들어볼 생각이다.

728x90