-
[백준]1132 : 합(javascript)JavaScript 2022. 7. 25. 21:55728x90
https://www.acmicpc.net/problem/1132
문제
N개의 수가 주어진다. 이 숫자는 모두 자연수이고, 알파벳 A부터 J가 자리수를 대신해서 쓰여 있다. 이 알파벳은 모두 한 자리를 의미한다. 그리고, 각 자리수는 정확하게 알파벳 하나이다. 0으로 시작하는 수는 없다. 이때, 가능한 수의 합 중 최댓값을 구해보자.
입력
첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 각 수가 주어진다. 수의 길이는 최대 12이다. 적어도 한 알파벳은 수의 가장 처음에 주어지지 않는다.
출력
첫째 줄에 합의 최댓값을 출력한다.
예제 입력 1
2 ABC BCA
예제 출력 1
1875
풀이
1. 입력 받기
객체로 이루어진 input 배열을 만들고자 했습니다.
if (!N) { N = parseInt(line); return; } let len = line.length; line.split('').forEach((c, idx) => { const obj = input.find(({ key }) => key === c); const value = Math.pow(10, len - idx - 1); if (!obj) { input.push({ key: c, value }); } else { obj.value += value; } if (idx == 0) { isFront[c] = true; } });
ABC가 입력으로 들어오면 input에 A를 key값으로 하는게 있는지 찾습니다.
없다면 key : A, value : Math.pow(10, len-idx-1) = 100 을 넣어줍니다. 즉,
input = [{key : 'A', value: 100}, {key:'B', value: 10},{key:'C', value:1}]이 되는데 여기서 그다음
BCA가 들어오면 이미 obj가 있기때문에(find에서 찾아줌) 더해주게 됩니다.
최종 input = [{key : 'A', value: 101}, {key:'B', value: 110},{key:'C', value:11}]이 됩니다.
그리고 추가로 isFront에 index가 0인 문자를 체크해뒀습니다.(추후에 0을 배치하기 위해서)
2. 내림차순 정렬
input.sort((a, b) => b.value - a.value);
3. 문자가 열개인가 = 0을 배치해야하나
for (let i = 9; i >= 0; i--) { const key = input[i].key; if (!isFront[key]) { map.set(key, 0); break; } }
내림차순으로 정렬했기때문에 가장 끝 수가 가장 작은 수 입니다.
isFront가 아니면서 가장 작은 수에 0을 setting해줍니다.
4. 나머지 숫자 배치 및 합 구하기
let num = 9; input.forEach(({ key }) => { if (!map.has(key)) { map.set(key, num--); } }); let sum = 0; input.forEach(({ key, value }) => { sum += value * map.get(key); });
전체 코드
let N; const input = []; const isFront = []; const solution = () => { const map = new Map(); input.sort((a, b) => b.value - a.value); if (input.length === 10) { // 0 배치하기 for (let i = 9; i >= 0; i--) { const key = input[i].key; if (!isFront[key]) { map.set(key, 0); break; } } } let num = 9; input.forEach(({ key }) => { if (!map.has(key)) { map.set(key, num--); } }); let sum = 0; input.forEach(({ key, value }) => { sum += value * map.get(key); }); console.log(sum); }; require('readline') .createInterface(process.stdin, process.stdout) .on('line', line => { if (!N) { N = parseInt(line); return; } let len = line.length; line.split('').forEach((c, idx) => { const obj = input.find(({ key }) => key === c); const value = Math.pow(10, len - idx - 1); if (!obj) { input.push({ key: c, value }); } else { obj.value += value; } if (idx == 0) { isFront[c] = true; } }); }) .on('close', () => { solution(); process.exit(); });
728x90'JavaScript' 카테고리의 다른 글
[JavaScrip] 함수와 일급 객체 (0) 2022.11.24 [JavaScript] 생성자 함수에 의한 객체 생성 (0) 2022.11.23 [JavaScript] 프로퍼티 어트리뷰트 (0) 2022.07.10 [JavaScript] let, const 키워드와 블록 레벨 스코프 (0) 2022.07.09 [JavaScript] 전역 변수의 문제점 (0) 2022.07.08