힌트 내용 덕분에 문제는 쉽게 풀 수 있었다.
class Solution {
public int solution(int balls, int share) {
int answer = 0;
int numerator = 0;
int denominator = 0;
numerator = factorial(balls);
denominator = factorial(balls - share) * factorial(share);
answer = numerator / denominator;
return answer;
}
private int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
}
테스트는 이걸로도 통과할 수 있지만, 해당 코드를 chatgpt에게 물어본 결과,
입력받는 balls 와 share 의 값이 음수일 경우 factorial 함수에서 무한 루프가 발생하여 무한 대기 상태가 될 수 있기 때문에, 이를 방지하기 위해 balls 나 share 값이 음수일 경우 함수의 반환 값을 '-1'로 설정하여 이후 처리에서 오류가 발생할 수 있도록 하는 것이 좋다는 답변을 받았다.
해당 솔루션을 추가한 코드는 아래와 같다.
class Solution {
public int solution(int balls, int share) {
if (balls < 0 || share < 0 || balls < share) {
return -1;
}
int answer = 0;
int numerator = 0;
int denominator = 0;
numerator = factorial(balls);
denominator = factorial(balls - share) * factorial(share);
answer = numerator / denominator;
return answer;
}
private int factorial(int n) {
if (n < 0) {
return -1;
}
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
}
하지만 테스트를 돌려보니 함정이 있었다.
아직 해당 오류의 원인을 찾지 못한 상황이지만, 블로그에 먼저 올려둔다.
'각종 문제들' 카테고리의 다른 글
[프로그래머스] 코딩테스트 입문 - 공 던지기 (0) | 2023.04.19 |
---|---|
[프로그래머스] 코딩테스트 입문 - 모스부호(1) (0) | 2023.04.12 |
[프로그래머스] 코딩테스트 입문 - 진료 순서 정하기 (0) | 2023.04.10 |
배포 자동화 중 오류 해결 (0) | 2023.04.04 |
[프로그래머스] 코딩테스트 입문 - 옷가게 할인 받기 (0) | 2023.04.03 |