문제 링크
https://www.acmicpc.net/problem/1339
풀이
const [ _, ...words ] = require('fs').readFileSync('/dev/stdin').toString().trim().split(/\s+/);
const solve = words => {
const count = {};
words.forEach(word => {
[...word].forEach((alphabet, i) => {
if (!count[alphabet]) count[alphabet] = 0;
count[alphabet] += 10 ** (word.length - i - 1);
});
});
console.log(
Object.values(count)
.sort((a, b) => b - a)
.reduce((acc, v, i) => acc + v * (9 - i), 0)
);
};
solve(words);
count라는 객체를 만들고, 각 단어를 순회하면서 count의 해당 알파벳 프로퍼티에 해당 알파벳 자리의 단위를 더해준다.
예를 들어, ABCDEF를 순회하면 count 객체는 { A: 100000, B: 10000, C: 1000, D: 100, E: 10, F: 1 }이 된다.
모든 단어를 다 순회한 다음에, count의 value들을 내림차순 정렬하여, 첫번째부터 9, 8, 7, 6...을 차례로 곱하여 더하면 최댓값을 구할 수 있다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 3036 - Node.js] 링 (0) | 2022.02.13 |
---|---|
[백준 1744 - Node.js] 수 묶기 (0) | 2021.12.06 |
[백준 1182 - Node.js] 부분수열의 합 (0) | 2021.12.01 |
[백준 10972] 다음 순열 with Node.js (0) | 2021.12.01 |
[백준 2294] 동전 2 with Python (1) | 2021.09.28 |