코딩테스트/PCCP
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (Java)
haleylog
2025. 2. 17. 14:40
요구사항
몬스터는 캐릭터를 정해진 시간에 정해진 피해량으로 공격하고
캐릭터는 붕대 감기 기술을 통해 일정 시간 동안 체력을 회복하며 연속 성공 시 추가 회복 한다.
몬스터의 공격이 끝난 시점의 남은 체력 구하기
(체력이 0이하인 경우 -1 return)
입력 값
int[] bandage | 붕대감기 기술 정보 [시전 시간, 초당 회복량, 추가 회복량] |
int health | 캐릭터의 최대 체력 (=시작 체력) |
int[][] attacks | 몬스터의 공격 정보 배열 [[공격 시간, 피해량], [공격 시간, 피해량] .. ] |
풀이
1. 마지막 공격 시점까지 초 단위로 loop 블럭
2. 현재 loop 시점이 공격 시점인 경우 몬스터 공격 처리
-> 공격량만큼 체력 차감
-> 붕대 감기 연속 시전 시간 초기화
-> 체력이 0 이하인 경우 return -1 (더 이상 loop 불필요)
3. 현재 loop 시점이 공격 시점이 아닌 경우 붕대감기 처리
-> 초당 회복량 만큼 체력 충전
-> 붕대 감기 연속 시전 시간 추가
-> 연속 붕대 감기 성공 시 추가 회복량 만큼 체력 충전 및 붕대 감기 연속 시전 시간 초기화
-> 체력 충전 처리 후 최대 체력보다 초과하는 경우 남은 체력 = 최대 체력 으로 변경
4. 남은 체력 return
728x90
Java 코드
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int answer = 0;
int remainHealth = health;
int attackTime = 0;
int healSec = 0;
for(int sec=1; sec <= attacks[attacks.length - 1][0]; sec++) {
if(sec == attacks[attackTime][0]) {
remainHealth -= attacks[attackTime][1];
healSec = 0;
// 죽었으면 return
if(remainHealth <= 0) return -1;
// 마지막 공격 시간이 아니면, 다음 공격회차로 세팅
if(attackTime < attacks.length) attackTime++;
continue;
}
remainHealth += bandage[1];
healSec++;
// 연속 피채우기 성공이면 추가 회복
if(healSec == bandage[0]) {
remainHealth += bandage[2];
healSec = 0;
}
// 최대 체력 넘으면 최대 체력으로 세팅
if(remainHealth > health) remainHealth = health;
}
answer = remainHealth;
return answer;
}
}
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/250137
728x90
반응형