Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 2577 : 숫자의 개수

비망노트 2021. 9. 2. 21:08

문제

세 개의 자연수 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까지의 숫자가 각각 몇 번 쓰였는지 차례로 한 줄에 하나씩 출력한다.

 

 

예제입력 예제출력
150
266
427
3
1
0
2
0
0
0
2
0
0

 

⭕ 풀이

let input=require('fs').readFileSync('/dev/stdin').toString().split('\n').map(x=>Number(x));
let total=input[0]*input[1]*input[2];
let num= total.toString().split('');  //주어진 수의 곱을 ''을기준으로 배열로만듦

for(let i=0;i<10;i++){
    let count=0				// count를 초기화시켜주어야함
    for(let j=0;j<=num.length-1;j++){
        if(i==num[j]){
            count += 1;
        }
    }console.log(count);
};

i값이 0으로시작해 아우터루프가 한바퀴 돌기시작할때

count를 0으로 초기화시켜주고 j<=num.length-1까지 돌며

 

첫바퀴 - 아우터루프 i의 값은 0이며 count도 0으로 선언해준다.

           이후 이너루프 j는 0으로 num배열의 길이-1까지 if문을 반복한다.

           이때 i값은 0인상태인 첫바퀴이므로 0==num[j]를 비교하며 같다면 0으로 초기화해줬던 count에 1씩 더한다.

즉, 아우터루프가 1바퀴돌때 이너루프는 해당조건까지 더많이돌아야한다.

 

 

❗ 혹시 count = 0 선언을

for(let i=0;i<10;i++){
    ✅let count=0
    for(let j=0;j<=num.length-1;j++){
        ❌let count=0		
        if(i==num[j]){
            count += 1;
        }
    }console.log(count);
};

❌위치에적는다면  if절이 참이라 count에 1을 더해도 0으로 만들기때문에

0 0 0 1 0 0 1 이런식으로 답이 나온다.

 

❗ 혹은 console.log 를

for(let i=0;i<10;i++){
    let count=0	
    for(let j=0;j<=num.length-1;j++){
	   if(i==num[j]){
            count += 1;
        }❌console.log(count);
    }✅console.log(count);
};

❌위치에 적는다면 첫번째경우는 if절이 끝날때마다 출력해서 많은값을 출력한다.

 

 

 

 

 

 

 

-출처

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