[백준] JavaScript 2577번 숫자의 개수

Noma·2021년 8월 30일
0

Question

[백준] JavaScript 2577번 숫자의 개수

input

첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다.

ouput

첫째 줄에는 A × B × C의 결과에 0 이 몇 번 쓰였는지 출력한다. 마찬가지로 둘째 줄부터 열 번째 줄까지 A × B × C의 결과에 1부터 9까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

example

150
266
427

3
1
0
2
0
0
0
2
0
0

Solution 1

split와 filter 사용

세 수를 곱한 값을 split('')로 나눠준다. (ex. '123'=>['1','2','3'])
그리고 for문을 0에서 9까지 돌리면서 filter로 세 수를 곱한 값에 i와 같은 값들의 개수를 찾는다.

const arr=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);
const result=String(arr[0]*arr[1]*arr[2]).split('');
for(let i=0;i<10;i++){
  console.log(result.filter(x=>x===String(i)).length);
}

Solution 2

중첩된 for문을 사용

count 변수에 차례로 0~9와 같은 값들의 수를 누적시켜 출력한다.

const arr=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);
const result=String(arr[0]*arr[1]*arr[2]);
for(let i=0;i<10;i++){
    let count=0;
    for(let j=0;j<result.length;j++){
        result[j]===String(i)&&count++;
    }
    console.log(count);
}

Solution 3

문자열에 split의 특성을 응용

예를 들어, '123112'에서 '1'를 찾는다고 하자.
'123112'를 '1'로 split 해주면 다음과 같은 배열을 리턴받는데 이때 빨간색으로 체크된 부분에 '1'이 있다고 볼 수 있다.

그러므로 리턴된 배열의 길이(.length)에 -1를 해주면 찾는 값의 개수를 구할 수 있다.

const arr=require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map(Number);
const result=String(arr[0]*arr[1]*arr[2]);
for(let i=0;i<10;i++){
    console.log(result.split(String(i)).length-1);
}

What I learned

  • 문자열을 배열로 바꿔주지 않아도 인덱스 접근이 가능하다. '123'[0] -> '1'
  • split로 문자열에서 특정 문자의 개수를 구하는 방법

Reference

https://gurtn.tistory.com/41

profile
오히려 좋아

0개의 댓글