Computer Science/Algorithm :: 알고리즘

알고리즘 :: 찍먹 vs 부먹, 업그레이드 필요, 최소최대 실패

HJPlumtree 2021. 9. 28. 15:30

알고리즘 공부하며 배운내용

 

 

찍먹 vs 부먹

찍먹과 부먹의 선호도는 -1000부터 1000사이 정수로 표현

수가 작을수록 찍먹 선호, 클수록 부먹 선호

 

친구를 만날 때 마다 지금까지 만났던 친구의 찍먹과 부먹의 선호도의 중앙값만큼 선호

선호도를 출력

 

 

들어오는 값

친구 N명의 선호도가 만난 순서대로 입력

예)

10 -10 5 2 -3 -10 2

 

 

구하고 싶은 값

2명째 친구부터 선호도를 순서대로 각 줄에 출력

예)

0

5

3

2

0

2

 

 

생각

1. 2개부터 정렬을 해서 중간값을 구할 수 있겠다.

2. 최소값, 최대값으로 중앙값을 구할 수 있겠다.

 

 

코드

최소값, 최대값 방법으로 풀려고 하다가 미끄러졌다.

정렬 방법을 마구잡이로 만들었다.

// VSCode에서 JavaScript 테스트 하기위한 코드
// 메모장에 테스트 케이스 넣고 sauce.txt로 저장했다
let fs = require('fs')
let input = fs.readFileSync('sauce.txt').toString().split(' ').map(Number)

let len = input.length
let answer = 0
for (let i = 2; i <= len; i++) {
	
    // 매 for loop마다 배열 집어넣는다
    let arr = input.slice(0, i).sort((a, b) => a - b)
    
    // 짝수개, 홀수개 일 때 따로나온다
    if(i % 2 === 0) {
        answer = (arr[arr.length / 2 - 1] + arr[arr.length / 2]) / 2
    }
    else {
        answer = arr[Math.floor(arr.length/2)]
    }
    
    // 값이 -이면 반올림 해준다
    if(answer < 0) {
        answer = Math.round(answer)
    }
    
    // 부호 없애려구..
    if(answer === - 0)
    answer = 0
    console.log(Math.floor(answer));
}