본문 바로가기
algorithm/문제풀이

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

by yongfront 2024. 6. 20.
반응형
SMALL

 

https://school.programmers.co.kr/learn/courses/30/lessons/250137

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이런 구조가 짜짐

0초부터 몬스터가 공격을 끝낸 시점까지 순회하면서

체력을 마지막에 리턴할 것

도중에 체력이 0 이하면 즉시 return -1;

 

를 표현하면

 

 

 

 

이 문제는 탐라의 흐름에 따라 데이터의 상태를 파악하는게 접근하기 좋은 문제이므로

몬스터 데미지 들어오는 것만 하면 된다

지금 당장은 시전시간(bandage[0])이 뭔 의미가 있는지 이해가 안되긴 함 필요 없는 거 아닌가

작성하다 보니

최대 체력이 넘어서 체력이 차는 버그를 수정 함 (21~23라인)

체력을 채운 후에 그 체력수치가 최대체력을 넘어갈 경우 최대체력으로 치환

 

도중에 2중 포문 쓰고 break로 탈출했다가 j 가 업데이트 안돼서

2중 포문을 아예 없애버리고 j 의 값이 ++ 되도록 수동으로 작성

 

 

결과는

 

체력이 0 이하일 때는 -1을 리턴하면 2, 3번은 맞을꺼고

테스트4가 1차이가 나니까 좀 디테일을 봐야겠다

 

 

이제 보니 아까 

시전시간(bandage[0])이 뭔 의미가 있는지 이해가 안됐었는데 

if (success === bandage[2]) 의 조건이 아니라

if (success === bandage[0]) 으로 하고 (연속 공격 성공했을 때 기술의 시전이니까) 추가 회복량은 그대로 추가 해주면됨

예제 1번에서 bandage 가 5, 1, 5 여서 처음과 끝이 5로 같아서 착각함 

 

그래서 불필요한 건 없다는 것

그리고 0초부터 시작할 필요 없고 1초부터 시작해도 된다

그리고! 성공 조건을 밑에 달게 아니라 

 

이런식으로 체력회복하자 마자 바로 성공을 시켜줘야 기술발동이 제대로 됨

테스트케이스4가 실패하는 이유였다

 

이제 제출 하니까

반밖에 통과 못함

뭔가가 잘못됐는데 질문하기에서 반례를 찾아야겠다

질문하기 뒤져도 다 통과돼서 뭐지 하고 좀 살펴보다가

일반체력 회복할 때도 최대체력 초과해서 회복되는 경우가 있었다

 

function solution(bandage, health, attacks) {
    let hp = health;
    let success = 0;
    let j = 0;
    for (let i = 1; i <= attacks[attacks.length - 1][0]; i++) {
        if (i === attacks[j][0]) {
            hp -= attacks[j][1];
            if (hp <= 0) return -1;
            success = 0;
            j++;
            continue;
        } else {
            if (hp < health) {
                hp += bandage[1];
                if (hp > health) {
                    hp = health;
                }
                success++;
                if (success === bandage[0]) {
                    hp += bandage[2];
                    if (hp > health) {
                        hp = health;
                    }
                    success = 0;
                }
            }
            continue;
        }
    }
    return hp;
}

 

728x90
반응형
LIST

'algorithm > 문제풀이' 카테고리의 다른 글

점프와 순간 이동  (0) 2024.06.21
달리기 경주  (0) 2024.06.20
신고 결과 받기  (1) 2024.06.20
연습문제 > 공원 산책  (0) 2024.06.19
개인정보 수집 유효기간  (0) 2024.06.12