문제에 나온 내용대로 조건문을 남발했더니 통과가 되긴 했다. 통과 후 다른 분들 코드를 보며 감탄중...
문제 요약
t초동안 허겁지겁 붕대를 감기 성공하면 y만큼 체력을 회복하고 감는 도중에 1초마다 x씩 체력을 회복한다.
하지만 몬스터에게 공격당하면 x고 y고 다 소용없고 attacks[i][j]만큼 체력이 깎인다!
최대 체력은 한계가 있다.
나의 운명은!?
근데 테스트 6번과 9번에서 실패가 발생했다ㅠ
[10, 10, 100], 10, [[1, 15], [3, 1]]
반례를 구해 콘솔을 찍어보니
사망했는데 체력이 남은 좀비가 되어있었다!!
(띠용)
다시 코드를 검토하니 사망 처리를 잘못한듯;;
다른 테스트들은 어떻게 통과한걸까 미스테리다.
if (nowHealth <= 0) { nowHealth = -1; return };
문법이 틀렸다. return -1;로 값을 반환해야한다.
최종 코드는 다음과 같다.
사망 변수는 없어도 될거같다.
const solution = (bandage, health, attacks) => {
const playTime = bandage[0]; // 시전 시간
const contNum = bandage[1]; // 초당 회복량
const plusHp = bandage[2]; // 추가 회복량
let nowHealth = health; // 현재 체력, 최대 체력
let successNum = -1; // 연속 성공 횟수
let isHeal = false; // 공격당하지 않았을 때 회복
let isDead = false;
const totalTime = attacks[attacks.length - 1][0];
for (let t = 0; t < totalTime + 1; t++) {
isHeal = true;
isDead = false;
if (successNum === playTime) {
successNum = 0;
nowHealth += plusHp;
}
if (nowHealth >= health) nowHealth = health;
++successNum;
attacks.forEach((item) => {
if (t === item[0]) {
isHeal = false;
nowHealth -= item[1]
successNum = 0;
if (nowHealth < 1) isDead = true;
}
})
if (isHeal) nowHealth += contNum;
if (isDead) return -1;
}
return isDead ? -1 : nowHealth;
}
다른 분들의 코드를 보며 복습
한줄이면 되는걸 세줄이나 썼다.
const [time, heal, bonus] = bandage;
const playTime = bandage[0]; // 시전 시간
const contNum = bandage[1]; // 초당 회복량
const plusHp = bandage[2]; // 추가 회복량
for...of
반복가능한 객체 (Array, Map, Set, String, TypedArray, arguments 객체 등을 포함)에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이 있는 사용자 정의 반복 후크를 호출하는 루프를 생성합니다.
최상위 노출 답안이 진짜 와.... 짱이다
계산이 어떻게 그렇게 되는지 이해가 안되긴하는데
일단 계속 들여다봐야지