Node.js 백준 알고리즘 7

김승우·2021년 6월 7일
0

🎉 1차원 배열

1. 3052 - 나머지

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const uniqueNumbers = [];
const numbers = input.map((num) => num % 42);

for (let i = 0; i < numbers.length; i++) {
  if (uniqueNumbers.indexOf(numbers[i]) === -1) {
    uniqueNumbers.push(numbers[i]);
  }
}

console.log(uniqueNumbers.length);

Array.prototype.includes(), Array.prototype.indexOf() 두 메소드 중에 어떤 것을 쓰는게 좋을까? => 참고

2. 1546 - 평균

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const count = parseInt(input[0]);
const grades = input[1].split(' ').map((num) => parseInt(num));

let max = grades[0];

for (let i = 1; i < grades.length; i++) {
  if (grades[i] > max) max = grades[i];
}

const sum = grades.reduce((acc, cur) => {
  return acc + cur;
}, 0);

const arg = sum / count;

console.log((arg / max) * 100);

3. 8958 - OX퀴즈

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const getSum = function (n) {
  return (n * (n + 1)) / 2;
};

const count = Number(input[0]);
let result = '';

for (let i = 1; i <= count; i++) {
  let sum = 0;
  // 1.
  const splitedArray = input[i].split('X').filter((v) => !!v);

  splitedArray.forEach((str) => {
    sum = sum + getSum(str.length);
  });

  if (i !== 1) {
    result += '\n';
  }
  result += sum.toString();
}

console.log(result);

문제 풀이에 대한 아이디어가 떠올라서 쉽게 풀 수 있었다.
1번 라인에서 각 입력을 'X'를 기준으로 나누고, filter를 통해 빈 문자열을 제거한다. 그러면 'O'만으로 이루어진 문자열을 갖는 배열을 만들 수 있다.
구하고자 하는 값은 연속된 'O'에 따른 점수이다.
'OO'일 경우 점수는 1 + 2, 'OOO'일 경우 점수는 1 + 2 + 3이다. 즉, "1부터 문자열의 길이까지의 합"을 구하는 문제라고 생각할 수 있다.
따라서, 수열의 합을 구하는 getSum함수를 생성하고, 각 문자열마다 합을 구해서 총합에 더해주면 이 총합이 각 퀴즈에 대한 점수가된다.

4. 4344 - 평균은 넘겠지

🎉 아이디어

  1. 각 케이스 별로 평균을 구한다.
  2. 평균을 넘는 학생의 숫자를 구한다.
  3. 평균을 넘은 학생의 숫자 / 케이스별 학생 수 * 100
  4. 각 케이스 별로 1~3을 실행한다.
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const count = Number(input[0]);
let result = '',
  i = 1;

for (i; i <= count; i++) {
  let line = input[i].split(' '),
    total = Number(line[0]),
    j = 1,
    sum = 0;

  for (j; j <= total; j++) {
    sum += Number(line[j]);
  }

  const arg = sum / total;
  const _count = line.slice(1).filter((v) => Number(v) > arg).length;
  const percentage = (_count / total) * 100;

  if (i !== 1) {
    result += '\n';
  }

  result = result + percentage.toFixed(3).toString() + '%';
}

console.log(result);
profile
사람들에게 좋은 경험을 선사하고 싶은 주니어 프론트엔드 개발자

0개의 댓글