230219_TIL

reggias·2023년 2월 21일
0

I learned

목록 보기
43/62

두 수를 나누고 나머지를 구하는 문제를 연산자 % 를 활용해 해결하고나서 문득 이게 정말 맞는가?에 대한 검증하는 코드를 만들어보고싶어져서 코드를 만들다가 겪은 시행착오에 관해 적어봄

Q. 두 num1, num2 를 입력받아 num1을 num2로 나눈 몫과 나머지를 구하시오.(단, % 는 사용하지 말것)

Things i tried

코드 버전1

function verification(num1, num2) {
    const share = 0;
    const remain = 0;

    share = Math.trunc(num1 / num2)

    return share
}

몫과 나머지에 대한 변수가 필요하다 생각했고 몫은 Math.trunc()로 정수를 추출하는 방법을 사용했음. paserInt()를 사용하지않은 이유는 어차피 10진법으로 해야했기 때문에 굳이 paserInt()를 사용할 이유가 없었기 때문

버전2

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문돌려서 몫과 나머지를 계산하면 편할까? 하는 생각에 코드를 만들어봤지만 이상한 시도였음을 깨달았다. 왜? 문제에서 매개변수를 두개 받으라고 했기 때문임.

What was the problem

버전3

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를 수정해야하는데 어떻게 하면 될까?

Things i tried 2

버전4

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이로소이다

해답을 수학공식에서 찾았다.

버전5

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 가 됨

버전6

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보다 커야한다는 조건을 넣어주면 마무리됨

What new did you learn?

수학공식을 알면 조금 편하구나 라는 생각이 듦
언제 변수를 만들어야할지 공식속에서 알게된 점
2 나누기 7의 나머지는 2 인지 몰랐다는 것

On a lighter note

사실 몫도 Math.trunc() 안쓰고 해보려고 파일을 나누다가 복붙 잘못해서 다 날아가버리는 바람에 멘탈이 무너져서 몫은 그냥 Math.trunc()로 만족...

profile
sparkle

0개의 댓글