1.{숫자타입 값}.toFixed()를 통해 반올림된 값을 얻을 수 있으며
toFixed()내부에 숫자를 입력할 경우 반올림된 값을 얻을 수 있다.

let number = 5/9
console.log(number)             = 0.5555555555555556
console.log(number.toFixed(0))  = 0.6
console.log(number.toFixed(1))  = 0.56
console.log(number.toFixed(2))  = 0.556
console.log(number.toFixed(3))  = 0.5556
console.log(number.toFixed(4))  = 0.55556
console.log(number.toFixed(5))  = 0.555556
console.log((0).toFixed(5))     = 0.00000
console.log((1).toFixed(5))     = 1.00000



2.템플릿 메소드 패턴(Template Method Pattern)은 
js에서는 기본제공되지 않는 기능인 abstract를 사용해야 한다.
로직을 단계별로 나눈 다음 
변경될 여지가 없는 단계들은 protected로 선언해 외부 접근을 막는다.
이후 여러가지 특정 조건의 변경사항이 있을 경우
나머지는 protected이며 그 조건만 abstract로 변경이 가능한
일종의 템플릿처럼 이용할 수 있는 방식이다.

interface는 해당 클래스의 함수를 활용하고 싶은 경우 사용되며
abstract는 부모의 기능을 확장시키고 싶을 경우 사용된다.
특히 abstract는 다중 상속이 되지 않는다는 점을 유의해 사용해야 한다.



(1).백준 평균은 넘겠지는 이상하게 풀리지 않았던 문제로
왜 틀렸는지 둘러보던 중 string.format이라는 단서를 얻을 수 있었다.
물론 자바에 대한 이야기였지만 유사한 기능이 JS에도 있을 것이라고 생각했고
검색을 통해 toFixed에 대해 알 수 있었다.
toFixed는 반올림 및 자릿수 고정을 자연스럽게 해주는 편한 기능으로
이것을 사용하지 않고도 0,1,2자리의 결과값(20.xxx% 2.xxx% 0%)을 분기했지만
왜 틀렸는지 곰곰히 생각해보니 자릿수에 따른 분기를 통해 처리했지만
결과가 0.1xxxx등일 경우를 고려하지 않았다.
또한 0.01xxx 0.001xxx등 내부 테스트케이스에 따라 변할 수 있기 때문에
추가적인 고려가 필요했고 1000개의 테스트케이스기 때문에
0.1% 단위까지 한칸만 더 고려했으면 되는 문제였다.

결국 0.1xx%인 경우까지 고려해 처리해 통과할 수 있었고
toFixed라는 빠른 해결법 또한 얻을 수 있었다.

let input = `8
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
1 1
11 0 0 0 0 0 0 0 0 0 0 1
101 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1`.split('\n')

let result = []

for(let i = 1 ; i < input.length ; i++){
    let scoreArr = input[i].split(' ').map(Number)
    let avg = 0
    let over = 0
    for(let j = 1 ; j < scoreArr.length ; j++){
        avg += scoreArr[j]
    }
    avg /= scoreArr[0]
    for(let k = 1 ; k < scoreArr.length ; k++){
        if(scoreArr[k] > avg){
            over++
        }
    }
    // console.log((over/scoreArr[0]*100).toFixed(3))
    let strResult = String(Math.round(over*100000/scoreArr[0])) + '%'
    if(strResult === "0%"){
        result.push("0.000%")
    }
    else if(strResult.length === 6){
        result.push(strResult.slice(0,2) + '.' + strResult.slice(2))
    }
    else if(strResult.length === 5){
        result.push(strResult.slice(0,1) + '.' + strResult.slice(1))
    }
    else{
        result.push('0.' + strResult)
    }
}

console.log(result.join('\n'))

+ Recent posts