콜라 문제
https://school.programmers.co.kr/learn/courses/30/lessons/132267#
나의 풀이
function solution(a, b, n) {
var answer = 0;
while(n >= a){
let received = Math.floor(n / a)
answer += (received*b)
n = (received*b) + (n % a)
}
return answer;
}
- 보유한 콜라의 개수가 a보다 작거나 같을 때까지만 작동하는 while문을 만들었다.
- 상빈이가 받는 콜라의 개수는 n에서 a만큼 나눈 뒤에 소수점자리는 제외한 값이다.
- 여기서 중요한 것은 그 다음으로 n(상빈이가 갖는 콜라의 개수)는 b개 만큼 받고 n을 a로 나눈 나머지값을 포함해야한다.
다른 사람의 풀이
solution = (a, b, n) => Math.floor(Math.max(n - b, 0) / (a - b)) * b
- 다른 사람의 풀이 중에서 가장 많은 좋아요 수를 받은 풀이는 위와 같다.
- n - b 값: 상빈이가 가지고 있는 빈 병의 개수 n에서 기준 병 수 b를 뺀 값이다. 추가적으로 교환 가능한 빈 병의 개수를 의미한다.
- Math.max(n - b, 0): n - b의 결과와 0 중에서 더 큰 값을 선택한다. 이는 추가적인 교환 가능한 빈 병의 개수를 0 미만으로 계산하는 것을 방지하기 위해 사용된다. 만약 n이 b보다 작다면, 교환 가능한 빈 병이 없으므로 0을 선택한다.
- (n - b) / (a - b): 교환 가능한 빈 병 개수를 기준 병 수 a와 마트가 주는 콜라 병 수 b의 차이 (a - b)로 나눈다. 이는 교환 가능한 빈 병으로 몇 번의 교환이 가능한지를 계산하는 것이다.
- Math.floor((n - b) / (a - b)) * b: 정수 값에 마트가 주는 콜라 병 수 b를 곱한다. 이는 교환 가능한 빈 병의 개수에 해당하는 콜라 병 수를 계산하는 것이다.
더보기
참고 및 출처자료
1. chat.openai.com
2. 콜라문제 다른 사람의 풀이, https://school.programmers.co.kr/learn/courses/30/lessons/132267/solution_groups?language=javascript
'JS > 알고리즘(코테)' 카테고리의 다른 글
프로그래머스 코딩테스트 LV.1 - 소수 만들기 (0) | 2023.07.22 |
---|---|
프로그래머스 코딩테스트 LV.1 - 과일 장수 (0) | 2023.07.18 |
프로그래머스 코딩테스트 LV.1 - 푸드 파이트 대회 (0) | 2023.07.11 |
프로그래머스 코딩테스트 LV.1 - 비밀지도 (0) | 2023.07.06 |
프로그래머스 코딩테스트 LV.1 - 최소직사각형 (0) | 2023.07.02 |