코딩연습

[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()를 이용하여 먼저 정리한 후 반복문 작업을 진행하였다.