TIL14-04 코딩테스트 생각을 단순하게

김태혁·2023년 1월 25일
0

TIL

목록 보기
45/205
  • 문제 설명
    링크텍스트
  • 풀이 과정
    n개의 콜라가 주어질 때 a만큼 가져가면 b개의 콜라를 돌려 주기 때문에
    반복문을 돌려 i를 a로 나눈 나머지 값이 0개인 값을 카운트 하면 될 것 같았다.
function solution(a, b, n) {
    let count = 0;
    for (let i = 1; i < n; i++) {
        if (i % a == 0) {
            count += 1;
        }
    }
    return count
}

그런데 위와 같은 함수를 병이 교환 될때까지 몇 번 반복해야하는 문제를 마주했다.
함수를 반복해 본적이 없었고, 재귀 함수라는 것이 있다고는 들었지만 아직은 구글링을 해도 이해가 가지 않았다. 그래서 생각을 바꿔 다시 단순하게 접근해보려했다.
1.while문을 활용하여 돌려받는 콜라를 계속 더해준다.
2.돌려 받는 콜라는 n/a의 정수에 b 만큼이다.
3.다시 남은 콜라는 n/a의 정수
b + n/b의 나머지이다.

function solution(a, b, n) {
   let coke = 0; // 돌려 받을 빈 콜라병
   while (n >= a) { // n이 a보다 크거나 같다면
       coke += Math.floor(n/a)*b // coke에 n/a의 몫의 정수값에 곱하기 b를 해준다.
       n = Math.floor(n/a)*b + n%a;// n/a의 몫*b 에 n/a 나머지값을 더하면 남은 콜라가 된다. 이 콜라병으로 다시 반복한다. 
   } return coke; 
}
profile
도전을 즐기는 자

0개의 댓글