TIL_210304

멜로디·2021년 3월 4일
0

Today I Learned

목록 보기
8/30

오늘 배운 것

  • 반복문 코플릿 10번
  • 반복문 코플릿 17번

반복문 코플릿 다시 풀기

10번

문제

두 개의 수를 입력받아 두 수를 포함해 두 수 사이의 수 중 2의 배수의 개수를 리턴해야 합니다.

입력

  • 인자 1 (num1) : number타입의 정수 (num1 >=0)
  • 인자 2 (num2) : number타입의 정수 (num2 >=0)

출력

  • number 타입을 리턴해야 합니다.

주의사항

  • 반복문(for)을 사용해야 합니다.
  • num1num2보다 작지 않을 수도 있습니다.
  • 0은 2의 배수가 아니라고 가정합니다.

입출력 예시

let output = makeMultiplesOfDigit2(8, 12);
console.log(output); // --> 3

output = makeMultiplesOfDigit2(12, 8);
console.log(output); // --> 3

output = makeMultiplesOfDigit2(1, 3);
console.log(output); // --> 1

output = makeMultiplesOfDigit2(0, 0);
console.log(output); // --> 0

output = makeMultiplesOfDigit2(2, 2);
console.log(output); // --> 1

오류가 발생한 내 코드

function makeMultiplesOfDigit2(num1, num2) {

let large
let small

if(num1 === 0 && num2 === 0) {
  return 0;
}

if(num1 >= num2) {
  large = num1
  small = num2
} else if (num1 < num2) {
  large = num2
  small = num1
}

let result = 0

for(let i = small; i <= large; i++) {
  if(i % 2 === 0) {
    result = result + 1
  }
}

return result;

}

왜 오류가 발생했는가

테스트 코드의 오류 메세지를 보니, 연산을 1번씩 더 진행한 형태를 보였다.
debugger를 통해 확인해 보니 small이 0이라서 연산을 한번 더 해버리는 문제가 있었다.

해결방법

if (small === 0) {
  small = 1
}

이 조건문을 중간에 삽입했더니 불필요한 연산을 더 진행하지 않아 테스트케이스를 통과했다.

17번

문제

수를 입력받아 소수(prime number)인지 여부를 리턴해야 합니다.

입력

  • 인자 1 (num) : number타입의 수

출력

  • boolean 타입을 리턴해야 합니다

입출력 예시

let output = isPrime(2);
console.log(output); // --> true

output = isPrime(6);
console.log(output); // --> false

output = isPrime(17);
console.log(output); // --> true

my code

function isPrime(num) {

for (let i = 2; i < num; i++) {
  if(num % i === 0) {
    return false;
  }
}
return true;
}

이건 Math를 이용한 다른 방법으로 풀다가 화딱지나서 초기화시키고 그냥 맨바닥에서 코드를 작성해 보았는데, 생각보다 쉬웠다. 반복문이 도는 동안 그게 0으로 나뉘어 떨어지면 소수인 것이다.
역시 코드를 짤 땐 간결하게 생각하는 것이 좋은 듯 하다.

profile
하루하루 배울때마다 기록하는 일기장

0개의 댓글