[Node.js] 백준 #9076 : 점수 집계

전인혁·2022년 5월 28일
1

백준 Algorithm

목록 보기
3/5
post-thumbnail

문제분류

정렬

문제

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

한국 체조협회에서는 심판의 오심을 막기 위하여 점수 집계 시스템을 고치기로 하였다. 이전에는 5명의 심판이 1점부터 10점까지 정수의 점수를 주면 최고점과 최저점을 하나씩 제외한 점수의 합을 총점으로 하였다. 이를 보완하기 위해서 최고점과 최저점을 뺀 나머지 3명 점수의 최고점과 최저점의 차이가 4점 이상 나게 되면 점수 조정을 거쳐서 다시 점수를 매기려고 한다. 점수를 집계하여 총점을 계산하거나, 점수 조정을 거쳐서 다시 점수를 매기려고 하는 경우에는 총점 대신 KIN(Keep In Negotiation)을 출력하는 프로그램을 작성하시오.


입력
입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 다섯 심판이 준 점수 다섯 개의 정수 Ni(1 ≤ Ni ≤ 10, i = 1, 2, ..., 5)가 하나의 공백을 사이에 두고 주어진다.

출력
각 테스트 케이스에 대해서 총점을 한 줄씩 출력한다. 만일 점수 조정을 거쳐서 다시 점수를 매기려고 하는 경우에는 총점 대신 KIN을 출력한다.


예제 입력 1

4
10 8 5 7 9
10 9 10 9 5
10 3 5 9 10
1 2 3 6 9

예제 출력 1

24
28
KIN
KIN

Solution

  • 입력 데이터 가공
    테스트 케이스의 개수 T와 심판이 준 5개의 점수 Ni들의 배열을 각각 변수 T와 배열 newInput으로 분리한다.

  • 정렬 함수 구현 (내림차 순)
    2중 for loop를 사용하여 첫 번째 원소와 다음 원소를 비교하고, 다음 원소가 현재 원소보다 크다면 현재 원소와 자리를 바꾼다.

  • map()을 활용하여 각 테스트 케이스 정렬 후 결과 산출
    Ni를 공백문자를 기준으로 나누어 배열로 만들고, 해당 원소들을 모두 정수형으로 바꾼다.
    해당 배열을 위에서 구현한 정렬 함수 sort()를 이용해 정렬한다.
    만약, 정렬 값의 2번째 원소와 4번째 원소의 차이가 4 이상이면 결과 배열 answer[]에 "KIN"을 push. 다른 경우에는 2번째, 3번째, 4번째 원소의 합을 push 한다.

  • 결과 출력
    answer[]의 결과를 개행 문자("\n")를 포함하여 합친 뒤, console에 출력한다.


코드

// 입력 모듈 "fs" 불러오기
const fs = require("fs");
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n");

// 입력 데이터 가공
let T = parseInt(input[0]);
let newInput = [];
for (let i = 1; i <= T; i++) {
  newInput.push(input[i]);
}

// 정렬 함수 구현 (내림차 순)
function sort(arr) {
  let tmp = 0;
  for (let i = 0; i < arr.length; i++)
    for (let j = i + 1; j < arr.length; j++)
      if (arr[i] < arr[j]) {
        tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
      }
  return arr;
}

// Solution 함수
function Solution(newInput) {
  let answer = [];

  newInput.map((Ni) => {
    Ni = Ni.split(" ").map((el) => parseInt(el));
	Ni = sort(Ni)
    
    if (Ni[1] - Ni[3] >= 4) answer.push("KIN");
    else answer.push(Ni[1] + Ni[2] + Ni[3]);
  });

  console.log(answer.join("\n"));
}

Solution(newInput);
profile
Front-end Developer

0개의 댓글