알고리즘 문제 풀이/Javascript

JavaScript 백준 17211 좋은 날 싫은 날

맛대 2023. 11. 3. 15:55

https://www.acmicpc.net/problem/17211

로직

  • 좋은 날은 0, 싫은 날은 1인 것을 적용하여 Array(변수명 persent)에 좋은날 -> 좋은날인 경우 persent[0][0] 형식으로 확률 찾기
  • 전날 값이 오늘에도 적용 되므로 전날 값만 있으면 됨 => 기분을 기록하는 변수 moods의 크기가 2면 충분

코드 고칠점 및 배운 점

  • 기분을 기록하는 moods의 경우 Array(2)로 선언되어 초기값이 [undefined,undefined] 로 기록된 후 변경되는 방식

    • moods[0]moods[1]에 어떤 값이 들어가는지 바로 파악하기 힘들므로 초기값 설정을 해두는 것이 가독성에 도움이 된다
    • Python에서 moods = [[0]* 2 for _ in range(2)]와 같이 초기값 설정이 필요
    • const moods = Array.from(Array(N + 1), () => new Array(2).fill(0))
    • Array.from공식 문서
  • parseInt()는 문자열의 앞부터 숫자만 나올때까지 찾은 뒤 정수값을 반환

  • parseFloat()는 문자열의 앞부터 소수점을 포함하여 숫자만 나올 때 까지 찾은 뒤 소수를 반환

  • JavaScript는 정수, 소수 모두 타입이 number

// 좋은날 = 0, 싫은 날 = 1
const fs = require('fs');
const inputUrl = process.platform == 'linux' ? 'dev/stdin' : './17211.txt';
const inputs = fs.readFileSync(inputUrl).toString().trim().split('\n');
const [N,mood] = inputs[0].split(' ').map(Number);
const per = inputs[1].split(' ').map(Number);
const persent = [
    [per[0],per[1]],
    [per[2],per[3]]
];

let moods = new Array(2);
moods[0] = [(1-mood)*100,mood*100];


for (let i=0; i <N; i++){
    const beforeGoodMood = moods[i%2][0];
    const beforeBadMood = moods[i%2][1];
    const afterGoodMood = beforeGoodMood * persent[0][0] + beforeBadMood*persent[1][0];
    const afterBadMood = beforeGoodMood * persent[0][1] + beforeBadMood*persent[1][1];
    moods[(i+1)%2] = [afterGoodMood,afterBadMood]
};
const answer = moods[N%2]
for (let ans of answer){
    console.log(Math.round(ans*10));
};