https://school.programmers.co.kr/learn/courses/30/lessons/120840
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
제한사항
1 ≤ balls ≤ 30
1 ≤ share ≤ 30
구슬을 고르는 순서는 고려하지 않습니다.
share ≤ balls
입출력 예
입출력 예 설명
입출력 예 #1
서로 다른 구슬 3개 중 2개를 고르는 경우의 수는 3입니다.
입출력 예 #2
서로 다른 구슬 5개 중 3개를 고르는 경우의 수는 10입니다.
Hint
서로 다른 n개 중 m개를 뽑는 경우의 수 공식은 다음과 같습니다.
class Solution {
public int solution(int balls, int share) {
return fac(balls, share);
}
private int fac(int balls, int share) {
if (share == 0 || balls == share) {
return 1;
} else {
return fac(balls - 1, share - 1) + fac(balls - 1, share);
}
}
}
처음에는 1차원적으로 힌트 통해서 코드를 작성했는데 테스트케이스는 통과했지만
나머지 케이스들이 와다다다 오류가 났다.
찾아보니까 재귀함수를 사용해야 통과한다고 하길래 따로 재귀함수를 만들었다.
재귀함수는 공식이 따로 있어서 그대로 사용하면 된다!
만약, 4! 를 구해야 할 경우에는
1! = 1
2! = 2x1!
3! = 3x2!
4! = 4x3!
이렇게 호출이 되는데
4! = 4x3!
3!을 구하기 위해서 다시 호출하고
3! = 3x2!
2!을 구하기 위해서 또다시 호출하고
호출하고 호출하고 하는 방식이다.
팩토리얼과 재귀함수에 대한 내용은 따로 정리를 해두어야 할 것 같다.
오늘 코테 풀기 끝~~~!
'코딩테스트 > JAVA' 카테고리의 다른 글
[JAVA/프로그래머스] 편지 (0) | 2023.08.03 |
---|---|
[JAVA/프로그래머스] 배열의 유사도 (0) | 2023.08.02 |
[JAVA/프로그래머스] 배열 만들기 6 (0) | 2023.07.30 |
[JAVA/프로그래머스] 문자열 겹쳐쓰기 (0) | 2023.07.29 |
[JAVA/프로그래머스] 배열 조각하기 (0) | 2023.07.28 |