Don't be afraid of challenges

[프로그래머스] Lv.1 콜라문제 -js 본문

이것이 코딩테스트다

[프로그래머스] Lv.1 콜라문제 -js

초아롱 2024. 4. 24. 16:07
재귀함수

 

함수가 자신을 다시 호출하는 구조로 만들어진 함수

종료조건이 없으면 무한반복하게 된다. 반복문으로도 작성 가능

 

재귀함수 사용처 예시 : 이진 변환하기
function binary(num){
    if(num ==1 || num == 0) return String(num);
    return binary(Math.floor(num/2))+ String(num% 2);
}
console.log(binary(11));

/*
 * binary(11) = binary
 * binary(5) + 1 = binary +나머지(1)
 * binary(2) + 1 = binary +나머지(1) + 나머지(1)
 * binary(1) + 0 = binary +나머지(0) + 나머지(1) + 나머지(1)
 * 1
 * = 1011
 */
콜라문제 재귀함수로 풀어보기

 

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

 

프로그래머스

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

programmers.co.kr

    // a : 마트에 제출할 병 수
    // b : a 제출하면 받을 병 수
    // n : 가지고 있는 빈 병 수

 

가지고있는 병수 = parseInt(n/a)*b +n%a;

받은 병수 = parseInt(n/a)*b;

 

가지고 있는 병수를 업데이트하면서 받은 병수를 answer에다가 추가해주면 될것같다

 

풀이 (1) : do~while문 사용
function solution(a, b, n) {
    let answer = 0;
    do{
        answer += parseInt(n / a)*b;
        n = parseInt(n / a)*b + n%a;
    }while(n>=a);
    return answer;
}

 

풀이 (2) : 재귀함수 이용
function solution(a, b, n) {
    const recur = (a,b,n)=> n<a ? 0 : parseInt(n/a)*b + recur(a,b,parseInt(n/a)*b+ n%a);
    return recur(a,b,n);
}

 

 

...

재귀함수가 진짜 개념은 알아듣겠는데 막상 문제 풀려고하니까

으잉?

되버리는 것 같아서 나중을 위해서라도 연습 많이 해봐야할 것 같다