[백준 알고리즘] Node.js 2303. 숫자 게임

2023. 12. 21. 11:35카테고리 없음

1. 문제

https://www.acmicpc.net/problem/2303

 

2303번: 숫자 게임

N명이 모여 숫자 게임을 하고자 한다. 각 사람에게는 1부터 10사이의 수가 적혀진 다섯 장의 카드가 주어진다. 그 중 세 장의 카드를 골라 합을 구한 후 일의 자리 수가 가장 큰 사람이 게임을 이

www.acmicpc.net

 

2. 풀이

  • 문제는 세 장의 카드를 골라 일의 자리수가 가장 큰 사람이 이기는 게임이다.
  • 만약 일의 자리 수가 가장 큰 사람이 여러 명일 경우, 번호가 큰 사람을 출력하면 된다.
const [N, ...inputs] = require('fs').readFileSync('/dev/stdin')
                       .toString().trim().split("\n");

// 사람마다 가장 큰 일의 자릿수를 구하는 함수.
const findMaxVal = (array) => {
  const cards = array.split(" ").map(v => +v);
  const values = [];
  for(let i = 0; i < 3; i++){
    for(let j = i+1; j < 4; j++){
      for(let k = j+1; k < 5; k++){
        values.push(cards[i] + cards[j] + cards[k]);
      }
    }
  }

  const filtering = values.map(value => {
    const splits = value.toString().split("");
    return +splits[splits.length - 1]
  })
  
  // 위의 filtering은 아래와 같이 작성도 가능.
  // const filtering = values.map(value => value % 10) 

  return Math.max(...filtering);
}

const findAns = () => {
  const values = []; // 사람마다 가장 큰 일의 자릿수를 담을 배열 변수.

  for(let i = 0; i < +N; i++){
    values.push(findMaxVal(inputs[i]))
  }

  let maxVal = -1; // 가장 큰 값을 담을 변수
  let maxIdx = -1; // 가장 큰 값을 가진 사람의 번호를 담을 변수.
    
  for(let i = 0; i < +N; i++){
    if(maxVal <= values[i]){
      maxVal = values[i];
      maxIdx = i+1;
    }
  }
  
  console.log(maxIdx)
}

findAns();

 

3. 정리

  • 첨엔 동일할 경우를 완전히 제외하고 작성해서 틀렸었다. 문제 좀 잘 읽고 풀도록 하자~