반응형
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와 동일합니다.
반응형
'개발 > Coding Test' 카테고리의 다른 글
[프로그래머스 LV1] 공원 산책 - Java, Kotlin, Python, Go (0) | 2023.04.20 |
---|---|
[프로그래머스 LV2] 두 원 사이의 정수 쌍 - Java, Kotlin, Python, Go (0) | 2023.04.16 |
댓글