ALGORITHM

[백준/ node.js] 배열 - 2577번 숫자의 개수

연듀 2021. 6. 29. 11:17

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

 

문제

세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다.

입력

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

출력

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

 

 

const nums = require('fs').readFileSync('/dev/stdin').toString().split('\n');

const result = String(nums[0] * nums[1] * nums[2]);


for(let i=0; i<=9; i++){
    let count =0;
    for(let j=0; j<result.length; j++){
        if(result[j]==i){
            count++;
        }
    }
    console.log(count);
}

 

 

숫자 0부터 9까지 바깥쪽 for문을 돌고, 결과값의 길이만큼 안쪽 for문을 돌며

i와 일치하는 결과값의 문자의 개수를 구한다.

count는 안쪽for문 하나의 i값 탐색이 끝나면 출력해주고 0으로 초기화시켜준다.

 

이 때 result는 문자열이고 i는 숫자이기 때문에

if문에 result[j] === i 하면 count를 구할 수 없다. 

서로 다른 유형의 변수 [값]을 비교하는 "==" 를 사용 해야 한다.

 

 

 

split을 사용한 방법 

 

const nums = require('fs').readFileSync('/dev/stdin').toString().split('\n');

const result = String(nums[0] * nums[1] * nums[2]); 


for(let i=0; i<=9; i++){
  console.log(result.split(i).length-1);
}

 

 

정해진 숫자로 몇번 split을 했는지 알면 그 숫자의 개수를 구할 수 있다.

 

ex) 만약 17037300을 0으로 split한다면, 배열 [ '17', '373', '', '' ]이 나온다.

이 배열의 길이에 -1을 하면 숫자 0의 개수를 구할 수 있다. 

 

 

 

reduce를 사용한 방법 

 

let nums = require('fs').readFileSync('/dev/stdin').toString().split('\n').map(Number);

nums.pop();


let result = String(nums.reduce((prev, curr) => prev * curr)).split('');
 //  '1', '7', '0', '3', '7', '3', '0', '0'

let countArr=[]; // 0 0 0 0 0 0 0 0 0 0 

for(let i=0; i<10; i++){
    countArr.push(0);
}

for(let i=0; i<result.length; i++){
    countArr[result[i]]++;
}

// result를 모두 돌면서 result의 원소 숫자값에 해당하는 countArr의 인덱스의 개수를 추가시킨다.


countArr.forEach(function(element){
    console.log(element);
});

 

reduce를 사용해 입력받은 값들을 곱해보았다. 그런데 처음엔 result값이 0이 나와서 확인해보았더니

nums 배열에 마지막 원소 0 이 있어서 그런것이였다. 이건 왜 그런지 모르겠어서 좀 더 찾아봐야겠다..

임시방편으로 nums 배열 마지막 원소를 제거한채로 문제를 풀었다.

countArr 배열을 0으로 채우고 for문으로 result를 돌면서 result 원소 숫자 값에 해당하는 countArr의 인덱스 원소를 1씩 증가시켜 모든 숫자의 개수를 구한다.

forEach문으로 한 줄 씩 출력한다.