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));
};
'알고리즘 문제 풀이 > Javascript' 카테고리의 다른 글
JavaScript(with Python) 백준 17390 이건 꼭 풀어야 해! (0) | 2023.11.16 |
---|---|
Javascript 백준 1890 점프 (0) | 2023.11.08 |
백준 javaScript 14562 태권왕 (1) | 2023.11.06 |
Javascript 백준 10813 공 바꾸기 (1) | 2023.11.02 |
Javascript 백준 27964 콰트로치즈피자 (1) | 2023.11.02 |