코드노트

자바스크립트 배열 문제 풀이 - 숫자 빈도수 구하기 본문

Code note/자바스크립트 알고리즘 문제풀이

자바스크립트 배열 문제 풀이 - 숫자 빈도수 구하기

코드노트 2022. 8. 24. 15:59

입력 값 : 123 139

출력 값 : [ 1, 18, 8, 12, 2, 2, 2, 2, 2, 2 ]

 

ex) 입력 갑 사이의 숫자들 ( 123, 124, 125, ..., 137, 138, 139)

에서 자릿수 별로 숫자의 빈도수를 구해서 반환해야한다.

0 = 2, 1 = 22, 2 = 12,... 등등 각 자리수에 맞춰서 0이 몇번 나오는지, 1이 몇번 나오는지를 출력하면 되는 문제이다.

 

처음에 이 문제를 보고 숫자를 문자로 바꿔서 조건문으로 출력하려고 하였다.

문자로 바꾸지 않고 숫자 그대로를 출력할 수 있는 방법은 무었이 있을까?

 

결과 값에 0 부터 9까지의 자리를 만들어 놓고,

while문을 돌면서 %, / 를 통해서 자릿수를 구할 수 있었다.

* 나머지 연산 이후 parseInt로 정수를 만들어 준다. 

 ex) 123 % 10 = 3이 나온다. // 1의 자리 수는 3

 ex) 123 / 10 = 12이 나온다.

 ex) 12 % 10 = 2이 나온다. // 10의 자리 수는 2

 ex) 12 / 10 = 1이 나온다.

 ex ) 1 % 10 = 1이 나온다. // 100의 자리 수는 1

 

 이렇게 반복분을 돌면서 결과 값에 ++을 해주게 되면 숫자로 빈도수를 구할 수 있다.

 

  for (let i = 0; i < 10; i++) {
    result[i] = 0;
  }
  
  let num; // 변수를 만들어서 숫자를 하나씩 담아서 계산
  for (let i = s; i <= e; i++) {
    num = i;
    while (num != 0) { // num 이 0이 될때까지
      result[num % 10]++; // % 나머지로 1, 10, 100,... 자릿수를 구한다.
      num /= 10; // 나누기 한 값에
      num = parseInt(num); // 정수로 다시 담고
    }
  }

- 문자로 바꾸고 조건들을 통해서 넣는것보다 더 간단한 함수로 계산할 수 있었다.!