본문 바로가기

알고리즘 & 문제풀이

프로그래머스 - L1 콜라 문제

설계

반복문 안에서 총 받은 콜라병 수 와 남은 콜라병 수를 계산

남은 콜라병 수로 더 이상 교환이 불가능 할 때 반복문 멈추기

git : 콜라 문제

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/132267


문제 풀이

result 총 콜라를 받은 수

cokeBottle 콜라 교환 후 남은 콜라의 수

위를 계산하여 반복문 진행 중 cokeBottle이 마트에 줘야하는 병 수보다 작으면 더 이상 교환을 못 하기 때문에 반환

import Foundation

// a : 마트에 줘야 하는 수
// b : 마트에서 받는 수
// n : 초기 콜라 개수

func solution(_ a:Int, _ b:Int, _ n:Int) -> Int {
    var result: Int = 0
    var cokeBottle = n
    
    while(true) {
        let quotient = cokeBottle / a
        let remainder = cokeBottle % a
        
        result += ( quotient * b )
        cokeBottle = ( quotient * b ) + remainder
        
        if(cokeBottle < a) {
            break
        }
    }
    
    return result
}

다른 사람 풀이 분석

프로그래머스 - 윤응구 님


func solution(_ a:Int, _ b:Int, _ n:Int) -> Int {
    return (n > b ? n - b : 0) / (a - b) * b
}

굉장히 심플하나… 원리를 찾으려고 했으나 제 머리로는 이해를 못했습니다

프로그래머스 - GeonWoo Lee , Hoony


func solution(_ a:Int, _ b:Int, _ n:Int) -> Int {
    var cokeCount = n
    var receivedCokeCount = 0

    while cokeCount >= a {
        receivedCokeCount += cokeCount / a * b
        cokeCount = (cokeCount / a * b) + (cokeCount % a)
    }

    return receivedCokeCount
}

구현 도중 헷갈리지 않게 네이밍을 잘하신거 같습니다.

정리

∙ 문제를 잘 읽고 규칙에 따라 설계 후 구현

∙ 변수가 많아 질 경우 명확한 네이밍을 통해 헷갈리지 않아야 한다!