관리 메뉴

Jerry

백준 - 단계별 문제 - 1차원 배열 - node.js / javascript 본문

Problem Solving/Algorithm 문제 풀기

백준 - 단계별 문제 - 1차원 배열 - node.js / javascript

juicyjerry 2021. 7. 6. 00:39
반응형

 

 

1. 최소, 최대

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let len = Number(input[0]);
let resultMinMax = input[1].split(' ').reduce((minMax, num) => {
    const number = parseInt(num);
    
    minMax[0] = minMax[0] > number ? number : minMax[0];
    minMax[1] = minMax[1] < number ? number : minMax[1];
    
    return minMax;
}, [1000000, -1000000]);

console.log(resultMinMax.join(' '));

 

 

2. 최댓값

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((el) => Number(el));
let max = -99;

for (let i = 0; i < input.length; i++) {
    if (max < input[i]) {
        max = input[i];
        maxIdx = i + 1;
    }
}

console.log(max, maxIdx);

 

 

3. 숫자의 개수

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let result = (input[0] * input[1] * input[2]).toString();
let numsObj = {};


for (let i = 0; i < result.length; i++) {
    numsObj[result[i]] = numsObj[result[i]] ? numsObj[result[i]] += 1 : 1;
}

for (let i = 0; i < 10; i++) {
   if (numsObj[i]) console.log(numsObj[i]) ;
   else console.log(0);
}

 

 

4. 나머지

/*
    주어진 수의 나머지를 A 배열에 추가한다.
    순회하면서 indexOf 메서드를 이용해, 중복되는 수가 없으면 B 배열에 추가한다.
    B 배열의 길이를 반환한다.
    
    => 
*/

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

let numbers = [];
for (let i = 0; i < 10; i++) {
    numbers.push(Number(input[i]));
}

let restArr = numbers.map((el) => el % 42);
let notOverrideArr = [];
for (let i = 0; i < restArr.length; i++) {
    if (notOverrideArr.indexOf(restArr[i]) === -1) notOverrideArr.push(restArr[i]);
}

console.log(notOverrideArr.length);

 

 

5. 평균

/*
  모든 점수를 숫자형으로 바꾼다.
  점수 중 최댓값을 찾는다.
  최댓값으로 각 요소를 나눠주고 * 100을 해준다.
  모든 결괏값 요소를 더한다.
  합계를 과목의 갯수로 나눠준다.
*/

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let len = Number(input[0]);
let nums = input[1].split(' ').map((el) => Number(el));
let max = nums[0];
let sum = 0;

for (let i = 1; i < len; i++) {
    if (max < nums[i]) max = nums[i];
}

for (let i = 0; i < len; i++) {
    nums[i] = (nums[i] / max) * 100;
}

for (let i = 0; i < len; i++) {
    sum += nums[i];
}

console.log(sum / len);

 

 

6. OX퀴즈

/*
  새로운 배열은 1과 0으로 이뤄진다. 
  if : 'O'인 요소일 경우에 다음 요소도 동일하다면 1 대신 이전 값의 +1를 해준다.
  이 값의 모든 요소의 합계를 반환한다.
*/

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let len = Number(input[0]);
//    let answer = '';

for (let y = 1; y <= len; y++) {
    let ret = [];
    
    for (let x = 0; x < input[y].length; x++) {
        if (input[y][x] === 'O') {
            if (input[y][x - 1] === 'O') {
                ret[x] = ret[x - 1] + 1;
            } else {
                ret[x] = 1;
            }
        } else {
            ret[x] = 0;
        }
    }
    
    let sum = 0;
    for (let i = 0; i < ret.length; i++) {
        sum += ret[i];
    }
    console.log(sum);
    //    answer += sum + '\n';
}

//    console.log(answer);

 

 

 

7. 평균은 넘겠지

/*
   각 줄의 평균 점수를 구한다.
   각 줄에서 평균을 넘는 학생 수를 구하여 비율을 구한다.
*/

let input = require('fs').readFileSync('/dev/stdin').toString().split('\n');
let inputLen = Number(input[0]);

for (let i = 1; i <= inputLen; i++) {
    let classes = input[i].split(' ');
    let classesLen = Number(classes[0]);
    let sum = 0;
    
    for (let j = 1; j <= classesLen; j++) {
        sum += Number(classes[j]);
    }
    
    let classesAvg = (sum / classesLen);
    let cnt = 0;
    for (let t = 1; t <= classesLen; t++) {
        if (classes[t] > classesAvg) cnt++;
    }
    
    console.log((cnt / classesLen * 100).toFixed(3) + '%');
}

 

 

 

 

반응형