Q. 두 수(num1, num2 → 둘 다 0이상의 정수)를 입력받아, num1를 num2로 나눈 나머지를 리턴해야 합니다.
※ 나눗셈(/), 나머지(%) 연산자 사용은 금지
//나의 풀이
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 |
댓글