1. 문제에 대한 이해
- 우리가 풀어야 할 문제는 무엇인가?
- 정수 X가 주어졌을 때 연산 4개를 적절히 사용하여 1을 만들때, 연산을 사용하는 횟수의 최솟값을 출력하라. - 주어진 자료는 무엇인가?
- X = 정수
- 연산 4가지 : X가 5로 나누어 떨어지면 5로 나눈다. X가 3으로 나누어 떨어지면 3으로 나눈다. X가 2로 나누어 떨어지면 2로 나눈다. X에서 1을 뺀다.
2. 계획
- 이 문제를 푸는데 있어서 유용하게 쓸 수 있는 지식은 무엇인가?
- 재귀
- X가 5로 나누어 떨어지면 5로 나누고 count+1을 한다.
- X가 3으로 나누어 떨어지면 3으로 나누고 count+1을 한다.
- X가 2로 나누어 떨어지면 2로 나누고 count+1을 한다.
- X에서 1을 빼고 count+1을 한다.
- count 값을 리턴한다.
3. 실행
- 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (X, count = 0) => {
// count 값을 리턴한다.
if (X === 1) {
return count
}
// X에서 1을 빼고 count + 1을 한다.
if ((X - 1) % 5 === 0) {
return solution(X - 1, count + 1)
}
// X가 5로 나누어 떨어지면 5로 나누고 count + 1을 한다.
if (X % 5 === 0) {
return solution(X / 5, count + 1)
}
// X가 3으로 나누어 떨어지면 3으로 나누고 count + 1을 한다.
if (X % 3 === 0) {
return solution(X / 3, count + 1)
}
// X가 2로 나누어 떨어지면 2로 나누고 count + 1을 한다.
if (X % 2 === 0) {
return solution(X / 2, count + 1)
}
};
test('findNumber', () => {
expect(solution(26)).toEqual(3);
});
4. 반성
- 5,3,2 전부 다 나누어지지 않는 경우 -1을 연산을 하는 식으로 문제를 풀어봤는데
그렇게 하니까 최소 연산 횟수를 구할 수 없었다.
그래서 -1 연산을 가장 큰 수인 5를 나눌 경우와 함께 생각해보았다.
-1 연산을 한 후 그 값이 5로 나누어 떨어지는지 아닌지에 대한 여부를 확인하고 연산을 할 수 있도록 하였다. - 테스트는 통과 되었지만 이 방법이 완벽한 방법일까라는 의문이 들었다.
- 다른 테스트 케이스들을 더 생각해보고 코드 검증을 해봐야될 것 같다.
'코테연습' 카테고리의 다른 글
106. 이것이 코딩 테스트다 8장 : 효율적인 화폐 구성 Javascript (0) | 2022.09.04 |
---|---|
104. 이것이 코딩 테스트다 8장 : 개미 전사 Javascript (0) | 2022.09.04 |
102. 이것이 코딩 테스트다 7장 : 떡볶이 떡 만들기 Javascript (0) | 2022.09.02 |
101. 이것이 코딩 테스트다 7장 : 부품 찾기 Javascript (0) | 2022.09.02 |
100. 이것이 코딩 테스트다 5장 : 음료수 얼려 먹기 Javascript (0) | 2022.09.01 |
댓글