728x90
반응형
목차
https://www.acmicpc.net/problem/16434
문제
코드 구현 방향
NodeJs로 해줄 경우 범위로 인해서 bigint를 써주어야 한다....
구현 시 주의점
bigInt는 정수끼리만 연산이 가능하다. 따라서 반올림 계산이 약간 다르다
//반올림 구현
let monsz = (monHp + attack - 1n) / attack;
코드 구현
const input = require("fs")
.readFileSync("./dev/stdin", "utf-8")
.trim()
.split("\n");
let arr = [];
let [N, curAtk] = input[0].trim().split(" ").map(BigInt);
let lowHp = 1n;
let highHp = 10000000000000n * N;
for (let i = 1; i < input.length; i++) {
let ar = input[i].trim().split(" ").map(BigInt);
arr.push(ar);
}
function fighting(hp, attack) {
let m = hp;
for (let i = 0; i < arr.length; i++) {
let choice = arr[i][0];
let monHp = arr[i][2];
let monAtck = arr[i][1];
if (choice === 1n) {
let monsz = (monHp + attack - 1n) / attack - 1n;
hp -= monsz * monAtck;
if (hp <= 0n) return 0;
} else {
hp += arr[i][2];
if (hp >= m) hp = m;
attack += arr[i][1];
}
}
return 1;
}
let ans = 0n;
function binarySearch2(low, high) {
while (low <= high) {
let mid = (low + high) / 2n;
if (fighting(mid, curAtk)) {
high = mid - 1n;
ans = mid;
} else {
low = mid + 1n;
}
}
}
binarySearch2(lowHp, highHp);
console.log(ans.toString());
반응형
'백준 문제풀이 > Nodejs' 카테고리의 다른 글
[백준][이분탐색] 2776 암기왕 NodeJs 구현 (0) | 2024.11.14 |
---|---|
[백준][너비우선탐색] 1261 알고스팟 NodeJs 구현 (1) | 2024.11.13 |
[백준][백트래킹] 1103 게임 NodeJs 구현 (0) | 2024.11.11 |
[백준][이진 탐색] 7795 먹을 것인가 먹힐 것인가 NodeJs 구현 (0) | 2024.11.10 |
[백준][[이분탐색] 2343 기타레슨 NodeJs 구현 (0) | 2024.11.09 |