JavaScript 백준 온라인 알고리즘 공부
백준 4344 번 JavaScript 문제풀이
const fs = require("fs");
const input = (process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
`
)
.trim()
.split("\n");
let inputLine = input.map((num) =>
num.split(" ").map((array) => Number(array))
);
let answer = "";
let nNumber = inputLine[0][0];
for (let i = 1; i <= nNumber; i++) {
let scoreSum = 0; // 이 세 변수가 이 스코프 밖에 벗어나면 초기화를 못한체
let midScore = 0; // 다음 inputLine 배열에서 저징된 변수를 그대로 쓰게되고
let count = 0; // 연산결과는 엉망이 된다.
for (let j = 1; j <= inputLine[i][0]; j++) {
scoreSum += inputLine[i][j];
}
midScore = scoreSum / inputLine[i][0];
for (let z = 1; z <= inputLine[i][0]; z++) {
let parMidScore = parseInt(midScore);
if (parMidScore < inputLine[i][z]) {
count++;
}
}
answer += (100 / (inputLine[i][0] / count)).toFixed(3) + "%" + "\n";
}
console.log(answer);
for 문
안에 또 for 문
두 번을 연달아 쓰게 됐는데 연산에 쓰일 변수를 제 위치에 지정해 초기화하지 못해서 이번에도 애먹었다. 문제해결은 작은 문제부터 잘게 나눠서 해결
해야 한다는 상식은 머리로는 알고 있어도 실전에서 자연스럽게 적용하기는 쉽지 않았다. 여하튼 이번 문제의 핵심은 변수를 초기화 할 순서를 유심 할 것!!! 명심해야겠다.