프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 2023 인프콘 후기
  • nomadcoder
  • 자바스크립트
  • 내일배움단
  • vanilaJS
  • 스파르타코딩클럽
  • 자바스크립트비트마스크
  • 내일배움카드
  • MySQL
  • 코딩프로젝트
  • 자바스크립트알고리즘
  • 비트마스크
  • 투포인터알고리즘
  • 모던자바스크립트딥다이브
  • JavaScript
  • 알고리즘
  • 코드스테이츠
  • Til
  • nomadcoders
  • 국비지원

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/알고리즘 w.JavaScript

[알고리즘] 백준 2577번: 숫자의 개수 W_node.js

2022. 4. 27. 14:02

문제

 

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번 쓰였다.

 

풀이 1

const readFileSyncAddress = '/dev/stdin'; 

const fs = require('fs');
let input = fs.readFileSync(readFileSyncAddress).toString().trim().split(/\n/g).map(Number)
const nums =input.reduce((a,c) => a*c).toString().split('').map(Number);

// 0~9 => 0 해쉬맵 생성
let hash = new Map();
const arr = [0,1,2,3,4,5,6,7,8,9];
for(let x of arr){
    hash.set(x,0);
}

// nums의 요소 x의 갯수를 카운트
for(let x of nums){
    if(hash.has(x)) hash.set(x,hash.get(x)+1);
}

// 값을 한줄씩 출력
for(let [key,val] of hash){
    console.log(val);
}
  • 0~9 까지의 키가 담긴 새로운 맵을 생성하여 세 수를 받아 곱한 값의 배열 요소와 비교하여 값을 카운팅하고, 이 값을 한 줄씩 출력하는 방식으로 풀었다. 
  • 같은 길이를 도는 for문이 세 번이나 쓰였는데, 이를 한 번으로 줄일 수 있을 것 같아 배열 메소드를 활용한 다른 풀이 방법을 참고하여 다시 풀었다.

풀이 2

const readFileSyncAddress = '/dev/stdin'; 

const fs = require('fs');
let input = fs.readFileSync(readFileSyncAddress).toString().trim().split(/\n/g).map(Number)
const nums =input.reduce((a,c) => a*c).toString().split('').map(Number);

for(let i = 0; i < 10; i++){
    let arr = nums.filter((e)=> e === i);
    console.log(arr.length);
}
  • key, value 쌍의 맵을 만들지 않고, filter 메소드를 활용해 그 길이를 반환하는 풀이방법.
  • Array.filter 메소드는 배열 내 항목 중 매개변수로 전달된 조건을 충족시키는 배열들만 반환한다. (원래 배열을 변경하지 않음.) 
  • 이 경우 i를 반복할 때마다 nums배열의 요소 e와 i가 같은 경우만 골라 새로운 배열을 계속 생성한다.
  • 그와 동시에 그 배열의 길이를 출력하여 중복된 숫자의 갯수를 세는 것이다. 

참고자료

  • [boj node.js] 백준 2577번 숫자의 개수 javascript
  • 자바스크립트로 하는 자료 구조와 알고리즘
저작자표시 (새창열림)

'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글

[알고리즘] 백준 1546번: 평균 W_node.js  (0) 2022.04.27
[알고리즘] 백준 3032번: 나머지 W_node.js  (0) 2022.04.27
[알고리즘] 백준 2439번: 별찍기-2 W_node.js  (0) 2022.04.25
[알고리즘] 백준 1110번: 더하기 사이클 W_node.js  (0) 2022.04.25
[알고리즘] 백준 10950번: A+B - 3 W_node.js  (0) 2022.04.25
    'Algorithm & 자료구조/알고리즘 w.JavaScript' 카테고리의 다른 글
    • [알고리즘] 백준 1546번: 평균 W_node.js
    • [알고리즘] 백준 3032번: 나머지 W_node.js
    • [알고리즘] 백준 2439번: 별찍기-2 W_node.js
    • [알고리즘] 백준 1110번: 더하기 사이클 W_node.js
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바