본문 바로가기
개발/Coding Test

[프로그래머스 LV1] 콜라 문제 - Java, Kotlin, Python, Go

by dwony26 2023. 5. 6.
반응형

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

 

프로그래머스

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

programmers.co.kr

 

이 문제는 빈 병 a개를 가져다주면 콜라 b병을 주는 마트가 있을 때, 빈 병 n개를 가져다주면 몇 병을 받을 수 있는지 계산하는 문제입니다. 빈 병을 가져다주면 콜라를 받을 수 있고, 받은 콜라를 마시고 난 빈 병을 다시 가져다주면 콜라를 또 받을 수 있습니다. 빈 병의 개수가 a보다 작을 때까지 반복하면서 받은 콜라의 수를 계산하면 됩니다.

 

 

Java

class Solution {
    public int solution(int a, int b, int n) {
        int answer = 0;
        for (int i = n; i >= a; i = i / a * b + i % a) {
            answer += i / a * b;
        }
        return answer;
    }
}

for문에서 i의 값을 빈 병의 개수로 변화시키면서 콜라의 수를 구해줍니다. 빈 병 a개를 가져다주면 콜라 b병을 받을 수 있으므로 콜라의 수는 i / a * b 이고, 받은 콜라의 수와 남은 빈 병인 i % a를 더해주면 다음 차례에 사용 가능한 빈 병의 개수가 됩니다.

 

Kotlin

class Solution {
    fun solution(a: Int, b: Int, n: Int): Int {
        var answer = 0
        var m = n
        while (m >= a) {
            val q = m / a
            val r = m % a
            answer += q * b
            m = q * b + r
        }
        return answer
    }
}

Kotlin은 for loop가 Java의 foreach처럼 작동하기 때문에 while loop를 사용했습니다. 그리고 파라미터로 넘어온 n을 직접 변경할 수 없기 때문에 m으로 받아서 처리했습니다.

 

Python

def solution(a, b, n):
    answer = 0
    while n >= a:
        (q, r) = divmod(n, a)
        answer += q * b
        n = q * b + r
    return answer

내장함수 divmod를 사용하면 몫과 나머지를 한 번에 구할 수 있습니다. 다른 부분은 Kotlin 코드와 동일합니다.

 

Go

func solution(a int, b int, n int) int {
    answer := 0
    for i := n; i >= a; i = i/a*b + i%a {
        answer += i / a * b
    }
    return answer
}

Java와 동일합니다.

반응형

댓글