본문 바로가기

코딩테스트/프로그래머스

[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기

728x90
반응형


🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr


👩‍💻 코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> bandage, int health, vector<vector<int>> attacks) {
    int j = 0;
    int continuous = 0;
    int currentHealth = health;
    
    for(int i=1; i<=attacks.back().front(); i++){
        if(i == attacks[j][0]){
            currentHealth -= attacks[j][1];
            
            if(currentHealth <= 0){
                return -1;
            }
            
            continuous = 0;
            j++;
        }else{
            currentHealth += bandage[1];
            continuous++;
            
            if(continuous == bandage[0]){
                currentHealth += bandage[2];
                continuous = 0;
            }
            
            if(currentHealth >= health){
                currentHealth = health;
            }
        }
    }
    
    return currentHealth;
}

📝 풀이

모든 공격이 끝난 직후 체력을 구해야 하니까 마지막 공격까지 for문을 돌린다.


공격을 받은 경우와 받지 않은 경우로 구분한다.

 

공격을 받은 경우는 체력을 깎고 0이하가 되면 -1을 return한다.

연속 시간을 0으로 초기화하고 다음 공격을 비교할 수 있도록 j++를 추가한다.

 

공격을 받지 않은 경우는 체력을 회복하고 붕대 감기 기술을 성공시켰다면 추가 회복을 하고 연속 시간을 0으로 초기화한다.

만약 현재 체력을 넘는다면 현재 체력을 max체력으로 초기화 한다.

728x90
반응형