(Swift) 백준 4796 캠핑

SteadySlower·2022년 5월 21일
0

Coding Test

목록 보기
42/305

4796번: 캠핑

var caseNum = 0

while true {
    caseNum += 1
    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    let L = input[0]
    let P = input[1]
    let V = input[2]
    
    // 0 0 0이 들어오면 break
    guard L + P + V != 0 else { break }
    
    // 휴가 기간 V 동안 연속된 P일이 몇번이나 들어갈 수 있는지
        // 여기에 L을 곱해서 캠핑을 할 수 있는 날을 일단 구한다.
    var days = (V / P) * L
    
    // 연속된 P일이 지나고 남은 날
    let rem = V % P
    
    if rem <= L { //👉 그 기간이 L보다 짧으면
        days += rem //👉 남은 날만큼 캠핑하고
    } else  { //👉 그 기간이 L보다 길면
        days += L //👉 최대 L만큼만 캠핑할 수 있으므로 L만 더한다.
    }
    
    print("Case \(caseNum): \(days)")
}
  1. P기간 동안 최대 L만큼만 캠핑할 수 있으므로 일단 V에 들어갈 수 있는 P 길이의 기간을 구합니다.
    1. 거기에 L을 곱해 줍니다.
  2. ⭐️ 나머지를 처리하는 과정에 두 가지 분기가 있습니다
    1. 먼저 남은 날짜라 L보다 짧다면 = 남은 날은 전부 캠핑할 수 있습니다.
    2. 반면에 남은 날짜가 L보다 길다면 = 남은 날 중에 L만큼만 캠핑할 수 있습니다.

short coding

var cnt = 0

while true {
    cnt += 1
    let input = readLine()!.split(separator: " ").map { Int(String($0))! }
    let (L, P, V) = (input[0], input[1], input[2])
    if L == 0 && P == 0 && V == 0 { break }
    let quotient = V / P
    let remainder = V % P < L ? V % P : L
    print("Case \(cnt): \(quotient * L + remainder)")
}
profile
백과사전 보다 항해일지(혹은 표류일지)를 지향합니다.

0개의 댓글