[JS] BOJ 2577번 숫자의 개수

yeopto·2022년 1월 12일
0

Algorithm

목록 보기
3/11
post-thumbnail

출처

BOJ

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

문제

세 개의 자연수 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번 쓰였다

나의 풀이

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');

let num = input[0] * input[1] * input[2];
num = num.toString();

solution();

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

입력 받은 것들을 다 곱한 뒤 변수에 할당 → 문자들의 배열로 만들어 주기 위해 문자열로 변환시켜줌 → 0~9 까지의 숫자가 각각 num안에 몇 개씩 있는지를 출력하여야함으로 0~9까지 반복문 안에 count변수를 선언 → 문자열로 변환된 숫자배열을 배열길이만큼 반복해주면서 요소 하나씩 i와 같은지 확인 → i와 같다면 count 하나씩 증가 → num 마지막 숫자까지 반복마무리되면 count 출력 → 다음 반복에서 count는 0이됨. ex) i = 0끝나면 count 출력 후 i = 1되면서 count를 다시 0으로 초기화.

다른 풀이 1

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().split('\n');

let num = String(input[0] * input[1] * input[2]); //17037300

solution();

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

숫자를 문자열로 바꿔주고 0~9까지 반복해주는것은 같음. 17037300을 0기준으로 나누면 [17, 373, ‘’, ‘’]가 되며 길이가 4인 배열이 됨. 0은 3개인데 길이는 4가 나옴. 그래서 i = 0~9까지 반복해주면서 i기준으로 문자열을 쪼개고 그것의 길이를 구한 뒤 1을 빼서 반복 출력하면 숫자안의 0부터 9까지 각각의 개수가 출력이 됨.


둘 다 시간과 메모리가 거의 같음.

profile
https://yeopto.github.io로 이동했습니다.

0개의 댓글