코딩연습
[JS] 백준 알고리즘 Node.js 1296. 팀 이름 정하기.
니 뽀
2023. 3. 11. 12:42
1. 문제
https://www.acmicpc.net/problem/1296
1296번: 팀 이름 정하기
연두는 프로그래밍 대회에 나갈 팀 이름을 정하려고 한다. 미신을 믿는 연두는 이환이에게 공식을 하나 받아왔고, 이 공식을 이용해 우승할 확률이 가장 높은 팀 이름을 찾으려고 한다. 이환
www.acmicpc.net
2. 풀이방법
1) 연두의 영어이름과 팀 이름 후보에서 각각 L, O, V, E 의 개수를 구한다.
2) 각각의 개수를 이용하여 ((L+O) × (L+V) × (L+E) × (O+V) × (O+E) × (V+E)) mod 100 의 값을 구한 후, 비교하여 가장 큰 값의 팀 명을 출력한다.
3) 만약 공식의 값이 동일할 경우, 사전 상 먼저오는 팀의 이름을 출력한다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const name = inputs.shift().split('');
const n = +inputs.shift();
inputs.sort();
let [l,o,v,e] = [0,0,0,0];
for(let i = 0 ; i < name.length; i++){
if(name[i] === 'L') l++;
else if(name[i] === 'O') o++;
else if(name[i] === 'V') v++;
else if(name[i] === 'E') e++;
}
let max = 0;
let maxName = '';
for(let i = 0; i < n; i++){
let teamName = inputs[i].split('');
let [tmpL, tmpO, tmpV, tmpE] = [l,o,v,e];
for(let j = 0; j < teamName.length; j++){
if(teamName[j] === 'L') tmpL++;
else if(teamName[j] === 'O') tmpO++;
else if(teamName[j] === 'V') tmpV++;
else if(teamName[j] === 'E') tmpE++;
}
let calc = ((tmpL + tmpO) * (tmpL + tmpV) * (tmpL + tmpE) * (tmpO + tmpV) * (tmpO + tmpE) * (tmpV + tmpE)) % 100;
if(calc > max) {
max = calc;
maxName = inputs[i];
}
}
if(maxName === '') console.log(inputs[0])
else console.log(maxName)
3. 정리
- 처음 여러개의 팀 이름을 테스트할때는 잘 작동하는 듯 하였으나, 팀 이름이 1개일 경우에 정상적으로 팀 이름이 나오지 않아 맨 마지막 if문을 추가하였다. 또한 사전 상 앞쪽에 오는 팀명들을 정리하기 위하여 반복문 for를 사용하기 전에 sort()를 이용하여 먼저 정리한 후 반복문 작업을 진행하였다.