https://www.acmicpc.net/problem/1339
첫번째 풀이 ( 실패 )
let [N,...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map((v) => v.split(''))
input.sort((a,b) => b.length-a.length)
let map = new Map();
let num = 9;
let result = input.map((v) => v.map((v) => {
if(!map.has(v)){
map.set(v,num)
num --
}
return map.get(v)
}).join(''))
.map(Number)
console.log(result.reduce((acc,cur) => acc+cur))
- 알파벳을 숫자로 치환해서 더했을 때 값이 가장 큰 경우의 최댓값을 출력
- 예제 입력값들을 입력값의 length로 sort(b-a)하여 순서대로 알파벳을 9부터 key,value로 생성하였다.
- 문제는 예제2번과 같은 경우 98765 + 483 = 99248 가 되어버려 결과값이 맞지 않는다.
- 입력값별 알파벳 자릿수의 총 크기를 합산할 필요가 있었다.
두번째 풀이
const [N,...input] = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').map((v)=>v.split(''))
const obj = {};
input.forEach((word) => {
word.forEach((char,idx) => {
if(!obj[char]) obj[char] = 0;
obj[char] += 10 ** (word.length-idx-1);
})
})
let result = Object.values(obj)
.sort((a,b)=>b-a)
.reduce((acc,cur,i) => acc + cur * (9-i),0)
console.log(result)
- 예제에 있는 ACDEB + GCF
- {
G: 100,
C: 1010, // 1000+10
F: 1,
A: 10000,
D: 100,
E: 10,
B: 1
} - 10000A + 1B + 1010C + 100D + 10E + 1F + 100G
- (10000 * 9) + (1010 * 8) + (100 * 7) + (100 * 6) + (10 * 5) + (1 * 4) + (1 * 3)
'백준' 카테고리의 다른 글
[백준 16953] A → B (0) | 2023.01.24 |
---|---|
[백준 13305] 주유소 / Node.js / 그리디 알고리즘 기초 (0) | 2023.01.24 |
[백준 11047] 동전0 / Node.js / 그리디 알고리즘 기초 (0) | 2023.01.23 |
[백준 1931] 회의실 배정 / Node.js (0) | 2023.01.23 |
[백준 2108] 통계학 / 배열 요소의 최빈값 구하기 / Object.entries() (0) | 2023.01.14 |