Coplit
[ Coplit ] - 15_modulo 문제 풀이
_moda
2023. 4. 2. 19:28
문제 |
두 수(num1, num2)를 입력받아, num1를 num2로 나눈 나머지를 리턴해야 합니다. |
입력 |
인자 1 : num1 |
number 타입의 정수 (num1 >= 0) |
인자 2 : num2 |
number 타입의 정수 (num2 >= 0) |
출력 |
number 타입을 리턴해야 합니다. |
주의 사항 |
나눗셈(/), 나머지(%) 연산자 사용은 금지됩니다. 0은 어떤 수로 나누어도 나머지가 0입니다. 어떤 수도 0으로 나눌 수 없습니다. 이 경우 'Error: cannot divide by zero'를 리턴해야 합니다. |
code
function modulo(num1, num2) {
// num2가 0이라면 num1이 10이라고 할 때 , 10을 0으로 나누는 것과 마찬가지이므로,
// 그 어떤 수도 0으로 나눌 수 없다.
// 따라서, 문제에 따라 'Error: cannot divide by zero' 리턴
// 또한,미리 이 조건문을 위에 위치한 이유는 굳이 밑에 로직이 돌아갈 필요가 없기 때문
if (num2 === 0) {
return 'Error: cannot divide by zero'
}
// 반복문의 이용해서 나눗셈을 뺄셈을 이용하여 num1이 num2보다 값이 같거나 작아지면 반복문을 종료한다.
while (num1 >= num2) {
num1 = num1 - num2;
}
// num1의 값을 계속 갱신하여 나머지 값을 만들고 있기 때문에 num1을 리턴한다.
return num1
}
풀이
이 문제를 푸는데에 중요한 점은 나눗셈을 통해 몫이나 나머지 값을 간편하게 얻으려면 / or % 연산자를 사용하면 되는데,
이 문제에서는 / 이나 % 연산자를 사용하지 않고 나머지 값을 return 하라고 되어있다.
따라서, 위에 있는 연산자를 사용하지 않고 나머지 값을 얻으려면,
뺄셈을 반복하는 것으로 표현할 수 있는 것을 알아야한다.
곱셈이 덧셈의 연장이라면, 나눗셈은 뺄셈의 연장이다.
예시 )
10 / 2
-> 뺄셈을 이용하여 나머지 값을 구하는 수식
10 -2 -2 -2 -2 -2 = 0; // 10 /2 와 같다.
이것을 코드로 나타낸다면 반복문을 사용하여 풀어야 한다.
그 이유는, 위에 예시에서는 우리가 나머지 값을 만드려면 -2 씩 뺀다는 것을 5번 반복해야 한다는 것을
우리는 알고 있지만 직접 코드를 작성할 때는 modulo 함수에서 나눗셈을 실행할 num1,num2가 얼마가
들어올지 모르기 때문에 반복문을 사용해야 한다는 것을 알 수 있다.
// 반복문의 이용해서 나눗셈을 뺄셈을 이용하여 num1이 num2보다 값이 같거나 작아지면 반복문을 종료한다.
while (num1 >= num2) {
num1 = num1 - num2;
}