[PCCP 기출문제] 1번 / 붕대 감기

하늘·2024년 4월 25일
0

프로그래머스

목록 보기
1/3
post-thumbnail

문제에 나온 내용대로 조건문을 남발했더니 통과가 되긴 했다. 통과 후 다른 분들 코드를 보며 감탄중...

문제 요약
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;
}


🔥반성의 시간

다른 분들의 코드를 보며 복습

1. 구조 분해 할당 안씀

한줄이면 되는걸 세줄이나 썼다.

const [time, heal, bonus] = bandage;

    const playTime = bandage[0]; // 시전 시간
    const contNum = bandage[1]; // 초당 회복량
    const plusHp = bandage[2]; // 추가 회복량

2. for of 문

for...of
반복가능한 객체 (Array, Map, Set, String, TypedArray, arguments 객체 등을 포함)에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이 있는 사용자 정의 반복 후크를 호출하는 루프를 생성합니다.

최상위 노출 답안이 진짜 와.... 짱이다
계산이 어떻게 그렇게 되는지 이해가 안되긴하는데
일단 계속 들여다봐야지

profile
새싹 프론트엔드 개발자

0개의 댓글

관련 채용 정보