본문 바로가기
Problem Solving

[Swift] 프로그래머스 콜라 문제(lv. 1)

by DuncanKim 2023. 1. 28.
728x90

[Swift] 프로그래머스 콜라 문제(lv. 1)

 

1. 문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 접근

콜라를 먹으면서 글을 쓰고 있다. 콜라는 좀 기계들이 무한 생산하여 무료로 제공되었으면 좋겠다.

무튼 이 문제에서는 빈병과 먹은 콜라 수를 잘 나누어 갈라야 한다.

 

반복의 횟수를 알 수 없기 때문에 while문을 활용하면 될 것이다.

 

코드의 설명은 아래와 같다.

만약 빈 병의 개수가 a로 나누어 떨어진다면, 먹은 콜라는 (빈병 / a) * b로 셀 수 있다. 한 편 빈병도 똑같은 식으로 셀 수 있을 것이다.

cokeCount는 누적되어야 하는 값이고, emptyBottle은 계속 갱신되어야 하는 값이기 때문에 신경써서 나누어 관리해주면 된다.

한편 나누어 떨어지지 않는다면, emptyBottle에 a로 나눈 나머지를 추가로 더하는 과정만 추가하면 된다.

 

이 반복을 emptyBottle이 a 미만이 될 때까지 반복해주는 것이다. while의 조건을 통과하지 못하는 순간 탈출할 것이고, cokeCount를 리턴한다. 그러면 먹은 '콜라의 개수'를 온전히 셀 수 있다.

 

3. 코드

import Foundation

func solution(_ a:Int, _ b:Int, _ n:Int) -> Int {
    var emptyBottle = n
    var cokeCount = 0
    while emptyBottle >= a {
        if emptyBottle % a == 0 {
            cokeCount += (emptyBottle / a) * b
            emptyBottle = (emptyBottle / a) * b
        } else {
            cokeCount += (emptyBottle / a) * b
            emptyBottle = (emptyBottle / a) * b + (emptyBottle % a)
        }
    }
    return cokeCount
}
728x90

댓글