프론트엔드 센트럴파크 (☞゚ヮ゚)☞

반복문을 이용하여 무한 뺄셈 하기 본문

Algorism

반복문을 이용하여 무한 뺄셈 하기

자라나라나무나무나 2022. 7. 3. 17:57
두 자연수를 입력받아 앞의 숫자에서 뒤의 숫자를 뺄셈하며 반복연산하는 프로그램을 작성하시오.
무한연산을 막기위해 뺀 값이 음수일 때 프로그램이 종료된다.
1. 임시 저장소가 필요함
2. index를 이용하여 앞뒤 숫자를 뺀 다음 sequence에 담아서 출력 

 

function answer(s, e) {

    let sequence = [];
    let i = 0;

    sequence.push(s);
    sequence.push(e);

    while(e < 0) {
        s = sequence[i];
        e = sequence[i+1];

        sequence = sequence.push(s - e);
    }
    return sequence;
};

let input = [[9,3], [6,3], [13,7]];

for(let i = 0; i < input.length; i++) {
    process.stdout.write(`#${i + 1}`);
    console.log(answer(input[i][0], input[i][1]));
}

문제점

- 임시저장소를 만들지 않았음

- while 안에 if문을 만들 수 있는지 몰랐음 


정답

function answer(s, e) {

    let sequence = [];
    let sum; // 임시저장소

    sequence.push(s);
    sequence.push(e);

    while(1) {
        sum = s -e;
        s = e;
        e = sum;

        if(e < 0) break;

        sequence.push(e);
    }
    return sequence;
};

let input = [[9,3], [6,3], [13,7]];

for(let i = 0; i < input.length; i++) {
    process.stdout.write(`#${i + 1}`);
    console.log(answer(input[i][0], input[i][1]));
}

while(1)을 통하여 while문의 무한루프를 만든다.

sum은 s - e 한 값의 임시저장소이자 sequence 배열의 맨 마지막 값이다. 

뺄셈을 한칸씩 뒤로 밀려나면서 계산해야 하기 때문에  s = e, e = sum이 된다.

그리고 if문을 이용하여 뒤에 e의 값이 음수이게 되면 반복문을 종료한다.

그리고 e의 값을 sequence배열에 넣어준다.

Comments