Coplit

[ Coplit ] - 15_modulo 문제 풀이

_moda 2023. 4. 2. 19:28
문제
두 수(num1, num2)를 입력받아, num1num2로 나눈 나머지를 리턴해야 합니다.
입력
인자 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;
  }