Programming/Client

[Javascript] 입력한 숫자의 합 구하는 함수

Jiwoo 2022. 3. 17. 15:00

문제

아래 조건을 만족하는 함수 sumInput()을 작성해 봅시다.

  1. prompt 창을 띄워 사용자에게 숫자를 입력해 달라고 요청한 후, 입력받은 값들을 배열에 저장합니다.
  2. 숫자가 아닌 값, 혹은 빈 문자열을 입력하거나 'Cancel' 버튼을 누르면 질문을 멈춥니다.
  3. 배열 요소의 합을 계산하고 리턴합니다.
  4. 주의: 숫자 0은 유효한 숫자이므로, 사용자가 0을 입력하더라도 질문이 멈추지 말아야 합니다.

 

나의 풀이

  1. prompt 창으로 숫자를 입력받아, 값들을 배열에 저장
  2. 숫자가 아닌 값 / 빈 문자열 ('') / cancle 버튼 (null) 을 입력 시 질문이 멈춤 ('0' 입력시 멈추면 안됨)
  3. 배열 요소의 합을 계산하고 리턴
function sumInput() {
  let array = [];
  let value = +prompt("숫자를 입력하세요", "");

  while (!isNaN(value)) {
    array.push(value);
    value = +prompt("숫자를 입력하세요", "");
  }

  let sum;

  for (let i = 0; i < array.length; i++) {

    sum += array[i];
  }
  return sum;
}

alert(sumInput());

역시나 정상적으로 작동하지 않는다.

 

  • 문제점
    1. isNaN 으로 숫자형을 검사하면 걸러내지 못하는 부분이 있다.
      그러므로 빈 문자열 ('') / cancle 버튼 (null) 시, 계속 질문을 받게 된다.
      • isNaN("") ⇒ false
      • isNaN(null) ⇒ false
      • isNaN(undefined) ⇒ true
    2. sum의 선언값이 존재하지 않아 let sum = undefined 와 같다.
      -> undefined + 숫자NaN이 되어 문제가 발생
      ∴ sum값을 0으로 선언해야한다.
    3. value를 입력 받는 코드가 두 번 반복

 

해답

function sumInput() {

  let numbers = [];

  while (true) {

    let value = prompt("숫자를 입력해 주세요.", 0);

    // 입력받는 것을 정지해야 하는 경우
    if (value === "" || value === null || !isFinite(value)) break;

    numbers.push(+value);
  }

  let sum = 0;
  for (let number of numbers) {
    sum += number;
  }
  return sum;
}

alert( sumInput() );

 

  1. while 반복문 안에서 value를 입력받으면서 두 줄 코드를 한 줄로 줄임
  2. 조건문을 빠져나가는 경우가 특수하고 제한되어 있다면 ,break를 쓰는 것이 깔끔함
  3. 배열의 값을 순회하는 코드는 for...of문을 써서 간결하게 표현

 


참고

https://ko.javascript.info/array

 

배열

 

ko.javascript.info