Don't be afraid of challenges
[프로그래머스] Lv.1 콜라문제 -js 본문
재귀함수
함수가 자신을 다시 호출하는 구조로 만들어진 함수
종료조건이 없으면 무한반복하게 된다. 반복문으로도 작성 가능
재귀함수 사용처 예시 : 이진 변환하기
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);
}
...
재귀함수가 진짜 개념은 알아듣겠는데 막상 문제 풀려고하니까
으잉?
되버리는 것 같아서 나중을 위해서라도 연습 많이 해봐야할 것 같다
'이것이 코딩테스트다' 카테고리의 다른 글
| [프로그래머스] Lv.1 두 개 뽑아서 더하기-js (1) | 2024.04.29 |
|---|---|
| [프로그래머스] Lv.2 카펫 - js (0) | 2024.04.25 |
| [프로그래머스] Lv.2 이진변환 반복하기 -js (2) | 2024.04.23 |
| [프로그래머스] Lv.1 나머지가 1이 되는 수 찾기 -js (0) | 2024.04.14 |
| [프로그래머스] Lv.1 소수 찾기 (진행중) -js (0) | 2024.04.14 |