Poylib
기록형 프론트엔드
Poylib
전체 방문자
오늘
어제
  • 분류 전체보기 (91)
    • Programing (38)
      • Javascript (17)
      • Typescript (1)
      • React (9)
      • React-Native (6)
      • Git (4)
      • Next (1)
    • Study (36)
      • Algorithm (35)
      • Etc. (1)
    • Record (17)
      • Memoirs (12)
      • Group (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • javascript
  • react
  • typescript
  • react-native
  • 자바스크립트
  • 코칭스터디
  • 기초
  • 알고리즘
  • ReactNative
  • 백준
  • 코딩테스트
  • Git
  • Object
  • Error
  • 프로그래머스
  • 회고
  • 리액트
  • vite

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Poylib

기록형 프론트엔드

<BEAKJOON> 4344 JavaScript
Study/Algorithm

<BEAKJOON> 4344 JavaScript

2022. 4. 26. 12:25

 

 

for문을 이용해 각 배열의 첫 요소로 주어지는 배열의 개수와 평균을 구하고 .toFixed() 메서드를 이용해 답을 구해보려 한다.

const input = require('fs').readFileSync('test.txt').toString().split('\n');
const max = input[0];

for(let i=1;i<=max;i++) {
  let num = input[i].split(' ');
  let scope = num[0];
  let cnt = 0;
  let average = num.reduce((acc,v)=>acc+=v*1,0);
  average /= scope;
  for(let j=1;j<num.length;j++) {
    if(num[j]>average) {
      cnt++;
    }
  }
  let result = ((cnt/scope)*100).toFixed(3);
  console.log(`${result}%`)
}

// 40.000%
// 57.143%
// 33.333%
// 33.333%
// 44.444%

계산 방식엔 문제가 없는 것 같은데 출력이 꼬이는걸로 보아 average변수가 계산될 때 문제가 생긴 것 같다.

 

  let average = num.reduce((acc,v)=>acc+=v*1,0);
  average /= scope;
  console.log(average)
  
// 71
// 78.85714285714286
// 81
// 81.33333333333333
// 96.88888888888889

배열마다 평균이 약 1 정도가 더 붙어있었는데, reduce()메서드를 쓰면서 배열의 합에 학생 수를 나타내는 각 배열의 첫 번째 숫자가 포함된 것이다 :(

reduce()가 받는 인수중엔 index 자리도 있어서 가능한지 찾게되면 추후에 수정하도록 한다.

 

+) 첫 번째 인수를 제외하는 방법

  let average = num.reduce((acc,v)=>acc+=v*1,0)-num[0];
  // reduce에서 손 볼 필요없이 그냥 변수에서 바로 빼주면 되는 거 였다,,,,
  console.log(average)

 

다른 방법으로 .shift() 메서드를 이용해 처음부터 배열의 첫 번째 요소를 지우고 시작하면 선술 했던 문제가 해결된다.

const input = require('fs').readFileSync('test.txt').toString().split('\n');
const max = input[0];

for(let i=1;i<=max;i++) {
  let num = input[i].split(' ');
  let scope = num.shift();   //shift() 메서드는 원본 배열을 변경시킨다.
  let cnt = 0;
  let average = num.reduce((acc,v)=>acc+=v*1,0);
  average /= scope;
  // console.log(average)
  for(let j=0;j<scope;j++) { // 인덱스0을 지웠기 때문에 j는 1이 아닌 0에서 출발해야 한다.
    if(num[j]>average) {
      cnt++;
    }
  }
  let result = ((cnt/scope)*100).toFixed(3);
  console.log(`${result}%`)
}

// 40.000%
// 57.143%
// 33.333%
// 66.667%
// 55.556%
저작자표시 비영리 변경금지 (새창열림)

'Study > Algorithm' 카테고리의 다른 글

[programmers / JavaScript] 숫자 문자열과 영단어  (0) 2022.04.30
<BEAKJOON / node.js> 10828 스택  (0) 2022.04.29
<programmers / JavaScript> 직사각형 별찍기  (0) 2022.04.14
<BEAKJOON> 14681 JavaScript  (0) 2022.03.31
<BEAKJOON / node.js> 10171, 10172  (0) 2022.03.28
    'Study/Algorithm' 카테고리의 다른 글
    • [programmers / JavaScript] 숫자 문자열과 영단어
    • <BEAKJOON / node.js> 10828 스택
    • <programmers / JavaScript> 직사각형 별찍기
    • <BEAKJOON> 14681 JavaScript
    Poylib
    Poylib
    모시깽 기록

    티스토리툴바