본문 바로가기
알고리즘

Daily Coding 15. modulo

by 디디 ( DD ) 2023. 2. 3.

Q. 두 수(num1, num2 → 둘 다 0이상의 정수)를 입력받아, num1num2로 나눈 나머지를 리턴해야 합니다.

 

※ 나눗셈(/), 나머지(%) 연산자 사용은 금지

 

 

//나의 풀이

function modulo(num1, num2) {
  if(num1 === 0) {  //0은 어떤 수로 나누어도 나머지가 0입니다.
    return 0;
  }
  if(num2 === 0) {  //어떤 수도 0으로 나눌 수 없습니다.
    return 'Error: cannot divide by zero';
  }
  if(num1 === num2) {
    return 0;
  }
  let a = 0;
  for(let i = 0; i <= num1; i++) {  //num1 안에 num2 가 몇 개 들어가는지
    if(a < num1) {
      a = num2 * i;
    }
  }
  return num1 - a + num2;
}

  /와 %을 쓸 수 없는 상태이니 반복문과 곱셈을 이용해야겠다는 생각이 들었다. 예외 상황 두 가지를 미리 걸러내고, num1 안에 num2가 몇 개 들어갈 수 있는지를 찾아 나머지를 구하려고 했는데, 생각처럼 잘 되질 않아 테스트 결과를 보며 코드를 고쳐나갔다. 위 코드로 테스트는 통과되었지만 분명 더 좋은 방법이 있을 것 같다는 생각이 들었다. 

 

 

//레퍼런스 코드

function modulo(num1, num2) {
  if (num2 === 0) {
    return 'Error: cannot divide by zero';
  }

  while (num1 >= num2) {
    num1 = num1 - num2;
  }

  return num1;
}

  역시 훨씬 간단하게 풀 수 있는 문제였다. 레퍼런스 풀이를 살펴보면, while 문을 이용하여 반복해서 num2를 빼나가는 방식으로 풀었다. 반복 횟수가 명확하지 않을 때는 while 문이 주로 사용된다는 점을 잘 기억해 둬야겠다. 

 

 

 

 

 

'알고리즘' 카테고리의 다른 글

버블 정렬, 선택 정렬, 삽입 정렬  (0) 2023.09.11
Daily Coding 16. isIsogram  (0) 2023.02.06
Daily Coding 06. letterCapitalize  (0) 2023.01.25
Daily Coding 05. firstReverse  (0) 2023.01.25
Daily Coding 04. firstCharacter  (0) 2023.01.24

댓글