두 수를 나누고 나머지를 구하는 문제를 연산자 % 를 활용해 해결하고나서 문득 이게 정말 맞는가?에 대한 검증하는 코드를 만들어보고싶어져서 코드를 만들다가 겪은 시행착오에 관해 적어봄
function verification(num1, num2) {
const share = 0;
const remain = 0;
share = Math.trunc(num1 / num2)
return share
}
몫과 나머지에 대한 변수가 필요하다 생각했고 몫은 Math.trunc()로 정수를 추출하는 방법을 사용했음. paserInt()를 사용하지않은 이유는 어차피 10진법으로 해야했기 때문에 굳이 paserInt()를 사용할 이유가 없었기 때문
function verification(numbers) {
console.log(`들어온 매개변수는 ${numbers}입니다`)
const num = [];
if(numbers.length < 3) {
for (let i = 0; i < numbers.length; i++) {
console.log(`${numbers.length}의 길이를 가진 배열에서 ${i+1}번째의 값은 ${numbers[i]}`)
num[i] = numbers[i];
console.log(num)
} return num
} else {
return numbers
}
// share = Math.trunc(shareAndremain[i] / shareAndremain[i])
}
console.log(verification([3, 2]))
매개변수를 입력받을 때 배열로 받아서 for문돌려서 몫과 나머지를 계산하면 편할까? 하는 생각에 코드를 만들어봤지만 이상한 시도였음을 깨달았다. 왜? 문제에서 매개변수를 두개 받으라고 했기 때문임.
let num1, num2 = 0;
function verification(num1, num2) {
console.log(`입력받은 매개변수는 ${num1}, ${num2}입니다`)
const share = Math.trunc(num1 / num2);
const remain = num1 / num2 - Math.trunc(num1 / num2);
return `몫은 ${share}이요 나머지는 ${remain}이로소이다`
}
console.log(verification(3, 2))
// 입력받은 매개변수는 3, 2입니다
// 몫은 1이요 나머지는 0.5이로소이다
예를 들어 num1 = 3, num2 = 2 라고 가정할 때 이를 정수가 아닌 유리수로 표현했을 때 1.5가 됨. 그런데 여기서 몫은 1이고 나머지는 1이다. 그러면 소수점이 나오는 remain를 수정해야하는데 어떻게 하면 될까?
function verification(num1, num2) {
const share = Math.trunc(num1 / num2);
const remain = num1 - num2;
return `입력받은 두 수 num1, num2는 ${num1}, ${num2}이고 몫은 ${share}이요 나머지는 ${remain}이로소이다`
}
console.log(verification(3, 2))
// 입력받은 두 수 num1, num2는 3, 2이고 몫은 1이요 나머지는 1이로소이다
해답을 수학공식에서 찾았다.
function verification(num1, num2) {
const share = Math.trunc(num1 / num2);
const middle = num2 * share;
const remain = num1 - middle;
return `입력받은 두 수 num1, num2는 ${num1}, ${num2}이고 몫은 ${share}이요 나머지는 ${remain}이로소이다`
}
console.log(verification(10, 3))
// 입력받은 두 수 num1, num2는 10, 3이고 몫은 3이요 나머지는 1이로소이다
노트에서 num2' 가 커지면 num2는 num2'가 전혀 다른 변수가 되어야함을 알고 이름을 중간에서 사용되는 값이라는 의미로 middle이라고 지었음
num1 = 10, num2 = 3 이라고 가정할 때 Math.trunc = 3, middle = 9, remain = 1이 됨
그러면 middle은 num2 * Math.trunc가 되고
remain은 num1 - middle 이 됨.
이것을 코드로 구현하니 버전5 가 됨
function verification(num1, num2) {
const share = Math.trunc(num1 / num2);
const middle = num2 * share;
if (num1 > num2) {
const remain = num1 - middle;
return `입력받은 두 수 num1, num2는 ${num1}, ${num2}이고 몫은 ${share}이요 나머지는 ${remain}이로소이다`
} else {
const remain = num1
return `입력받은 두 수 num1, num2는 ${num1}, ${num2}이고 몫은 ${share}이요 나머지는 ${remain}이로소이다`
}
}
console.log(verification(2, 7))
// 입력받은 두 수 num1, num2는 2, 7이고 몫은 0이요 나머지는 2이로소이다
여기서 입력받는 num1은 항상 num2보다 커야한다는 조건을 넣어주면 마무리됨
수학공식을 알면 조금 편하구나 라는 생각이 듦
언제 변수를 만들어야할지 공식속에서 알게된 점
2 나누기 7의 나머지는 2 인지 몰랐다는 것
사실 몫도 Math.trunc() 안쓰고 해보려고 파일을 나누다가 복붙 잘못해서 다 날아가버리는 바람에 멘탈이 무너져서 몫은 그냥 Math.trunc()로 만족...