백준 2577번 숫자의 개수-JS

yugyeongKim·2021년 10월 17일
0

백준

목록 보기
11/52
post-custom-banner

- 내 코드(첫번째)

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
const inputNum = input.length // 3
let answer = '';
let A = Number(input[0]) //150
let B = Number(input[1]) //266
let C = Number(input[2]) //427
let result = (A*B*C);
let num0 = [];
let num1 = [];
let num2 = [];
let num3 = [];
let num4 = [];
let num5 = [];
let num6 = [];
let num7 = [];
let num8 = [];
let num9 = [];
let arr = []; // 곱의 결과 숫자들의 배열
arr = String(result).split('');

for(let i=0; i< arr.length; i++) {
    if(Number(arr[i]) === 0) {
        num0.push(arr[i]);
    } else if(Number(arr[i]) === 1) {
        num1.push(arr[i]);
    } else if(Number(arr[i]) === 2) {
        num2.push(arr[i]);
    } else if(Number(arr[i]) === 3) {
        num3.push(arr[i]);
    } else if(Number(arr[i]) === 4) {
        num4.push(arr[i]);
    } else if(Number(arr[i]) === 5) {
        num5.push(arr[i]);
    } else if(Number(arr[i]) === 6) {
        num6.push(arr[i]);
    } else if(Number(arr[i]) === 7) {
        num7.push(arr[i]);
    } else if(Number(arr[i]) === 8) {
        num8.push(arr[i]);
    } else if(Number(arr[i]) === 9) {
        num9.push(arr[i]);
    }
}

answer += num0.length + '\n' + num1.length + '\n' + num2.length + '\n' + num3.length + '\n' + num4.length
+ '\n' + num5.length + '\n' + num6.length + '\n' + num7.length + '\n' + num8.length + '\n' + num9.length

console.log(answer);
  • 숫자n(0~9)의 해당하는 배열을 만들어 그 배열에 집어넣는 방식
    와 씨 다시봐도 역대급 비효율적;;일단 처음으로 생각된거 바로 적은거 결과적으로 맞습니다가 뜨긴함 근데 좀 아닌거 같아서 다른사람거들 슬쩍 보고 바아로 개선해야겠다 생각

- 2번째로 개선한 코드

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let answer = '';
let A = Number(input[0]) //150
let B = Number(input[1]) //266
let C = Number(input[2]) //427
let result = (A*B*C);
let result_arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// let arr = []; // 곱의 결과 숫자들의 배열 17037300
let arr = String(result).split('');

for(let i = 0; i < arr.length; i++) {
    for(let j = 0; j < arr.length; j++) {
        if(Number(arr[i]) === j) {
            result_arr[j]++;
        }
    }
}

for(let i =0; i< result_arr.length; i++) {
    answer += result_arr[i] + '\n';
};

console.log(answer);
  • 숫자n(0~9)들의 빈도수를 나타낼 배열을 제작. 해당 숫자가 나올때마다 배열의 숫자를 +1시켜주는 방식
    첫번째거 하고 다른사람들 거 슬쩍 보고 아이다싶어 바꾼 방향 약간 요론식으로 한거같은 사람거 보고 생각 사실 이렇게 한게 아닐수도 근데 일단 해보겠다. 전보다는 효율적인거 같은데 문제는 VS코드에서만 실행된다. 틀렸다고 뜨는데 뭐가문제여샤발
    앗 바보다 Number(arr[i])는 arr배열의 길이만큼 그니까 17037300의 길이만큼 돌아야하고 j는 0부터9까지돌아야 하니 j는 arr.length가 아닌 result.length만큼 돌아야 한다!!!!!!!!!! 일케 고치니까 잘나옴ㅎㅎ
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let answer = '';
let A = Number(input[0]) //150
let B = Number(input[1]) //266
let C = Number(input[2]) //427
let result = (A*B*C);
let result_arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// let arr = []; // 곱의 결과 숫자들의 배열 17037300
let arr = String(result).split('');

for(let i = 0; i < arr.length; i++) {
    for(let j = 0; j < result_arr.length; j++) {
        if(Number(arr[i]) === j) {
            result_arr[j]++;
        }
    }
}

for(let i =0; i< result_arr.length; i++) {
    answer += result_arr[i] + '\n';
};

console.log(answer);

메모리는 처음 만든거랑 똑같지만 시간은 쬐애끔 덜 걸린다.

- 다른 사람 코드

var fs = require('fs');
var input = fs.readFileSync('/dev/stdin').toString().split('\n');
var a = parseInt(input[0]);
var b = parseInt(input[1]);
var c = parseInt(input[2]);

var resArr = (a*b*c).toString().split('');
for(var i=0; i<10; i++) {
  count = 0;
  resArr.filter(function(val, idx) {
    if(val == i) {
      count++;
    }
  });
  console.log(count);
}

간결.... filter를 써서 간결하게 했다. 나도 filter라는거를 알고있긴 했는데 이렇게 뙇 생각나지는 않았다.
아 그리고 String(abc).split('')가 (abc).toString().split('') 보다 더 빠르다(당연한건가)

post-custom-banner

0개의 댓글