TIL/알고리즘 공부

백준 4796번 Swift 알고리즘 연습 - 캠핑_그리디

여의도사노비 2023. 2. 4. 20:20
728x90

그리디 문제다.

 

그리디 자체로는 굉장히 유형이 다양한 느낌이다.

이 문제는 결국 문제를 관통하는 공식을 하나 찾는 것이 중요한 문제였고 한 번에 정리되는 공식이 나오지 않으면 메모리 부족 혹은 시간초과가 뜨는 문제이다.

 

요즘 프로그래머스 문제만 풀다가 오랜만에 백준을 풀어보니... 백준이 확실히 시간초과에 민감하다..! 효율성을 극대화하는 코드를 짜는 연습은 백준으로 하는게 맞는거 같다 ㅎㅎ

 

 

이 문제를 풀면서 생각한 논리적 흐름은

  1. V, P, L 값을 각각 받는다.
  2. 입력값이 "0 0 0"이 나오면 바로 break를 이용하여 for문을 종료시켜준다.
  3. V를 P로 나눈 몫으로 개수를 구하고
  4. L과 V를 P로 나눴을 때 나머지 중 작은 값을 더해준다.

 

 

* 4796번

for i in 0... {
    let testCase = readLine()!.split(separator: " ").map{$0}
    let V = Int(String(testCase[2]))!
    let P = Int(String(testCase[1]))!
    let L = Int(String(testCase[0]))!
    var count = 0
    
    if testCase[0] + " " + testCase[1] + " " + testCase[2] == "0 0 0" { break }
    
    count = (V / P) * L + min(L, V % P)
    
    print("Case \(i+1): \(count)")
}

 

 

정리(Today I Learned)

  1. 없음