Lennon FE

[백준 1339번] 단어 수학 - 자바스크립트(nodejs) 본문

카테고리 없음

[백준 1339번] 단어 수학 - 자바스크립트(nodejs)

Lennon 2022. 1. 27. 02:25
728x90
반응형

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

 

1339번: 단어 수학

첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대

www.acmicpc.net

const fs = require('fs');
let input = fs.readFileSync('dev/stdin').toString().trim().split('\n');
input.shift();

const count = {};
const number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

input.forEach((value) => {
  [...value].forEach((value2, idx) => {
    if (!count[value2]) count[value2] = 0;
    count[value2] += 10 ** (value.length - idx - 1);
  });
});

console.log(
  Object.values(count)
    .sort((a, b) => b - a)
    .reduce((prev, cur, i) => prev + cur * number.pop(), 0)
);

알고리즘은 간단하다.

ABC, DEF 두 알파벳이 있을 때 해당 알파벳 위치 값에 대해 계속 더해준다. 이러면 영향이 큰 알파벳 별로 정렬할 수 있다.

 

ex) ABA, DEF 는 

A = 101

B = 10 

D = 100

E = 10

F = 1     로 정렬할 수 있다.  A는 101만큼의 영향이 있고, B는 10만큼, ... F는 1만큼 있다.

 

이 값을 정렬해 9부터 차례대로 곱하면서 더해주면 된다.

 

객체에 해당 값이 없으면 0으로 초기화해주고, 값을 위치값에 따라 제곱하여 0에 더해준다.

객체를 사용했으므로 Object.value로 배열로 만든 후 정렬하고 더해주면 끝!

728x90
반응형
Comments