알고리즘 문제 풀이

[Swift] BOJ 2839 설탕 배달

lgvv 2022. 3. 22. 14:54

BOJ 2839 설탕 배달

 

✅ 그리디를 공부하면서 한번 풀어 본 문제인데, 진짜 생각보다 너무 오래 걸림.

내 문제점이 input case에 대해서 면밀히 살펴보지 않는다는 건데, 진짜 좀 살펴봐야겠음.

머릿속으로 이렇게 하면 되겠지 하고 기깔나게 풀었는데, 틀렸다길래 보ㅇ니까 그냥 틀렸더라 .. 로 직 이 ..

이걸 한시간이나 걸려 풀었다니!

 

문제가 무엇이었냐면

11이 들어왔을때는 (5 + 3 + 3)으로 처리가 가능했음.

근데 나는 5에서 몫을 구하고 나머지를 input에 재할당하여 사용하니까 11을 처리할 수가 없게 되었음.

 

근데 가만히 생각해보니, 그냥 한번 수행할 때, 한번씩 숫자를 빼면서 해도 될 것 같은 기분이 들었음.

뭔 ㄱ ㅏ 시간복잡도가 정직하게 O(N)이라서 좀 그런 기분은 있었지만, 그냥 하니까 통과

        var count = 0
        
        var input: Int! = Int(readLine()!)! // 3..<5000 정수
        
        while input > 0 {
            
            // 둘다 0으로 나누어 떨어지는지 체크 (큰수가 유리함으로 큰수부터 차례로)
            if input % 5 == 0 {
                count += 1
                input -= 5
            } else if input % 3 == 0 {
                count += 1
                input -= 3
            } else if input > 5 { // 둘다 나누어 떨어지지 않는데, input이 5보다 크면
                count += 1
                input -= 5
            } else {
                count = -1
                break
            }
        }
        print(count)