![[프로그래머스/JAVA] 250137번 붕대 감기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8fte5%2FbtsKpuiwVWm%2FWYBce8mC24fBcmbliAbK9k%2Fimg.png)

문제
문제 링크
[PCCP 기출문제] 1번 / 붕대 감기
https://school.programmers.co.kr/learn/courses/30/lessons/250137
문제 설명
어떤 게임에는 붕대 감기라는 기술이 있습니다.
붕대 감기는 t초 동안 붕대를 감으면서 1초마다 x만큼의 체력을 회복합니다.
t초 연속으로 붕대를 감는 데 성공한다면 y만큼의 체력을 추가로 회복합니다.
게임 캐릭터에는 최대 체력이 존재해 현재 체력이 최대 체력보다 커지는 것은 불가능합니다.
기술을 쓰는 도중 몬스터에게 공격을 당하면 기술이 취소되고, 공격을 당하는 순간에는 체력을 회복할 수 없습니다.
몬스터에게 공격당해 기술이 취소당하거나 기술이 끝나면 그 즉시 붕대 감기를 다시 사용하며, 연속 성공 시간이 0으로 초기화됩니다.
몬스터의 공격을 받으면 정해진 피해량만큼 현재 체력이 줄어듭니다.
이때, 현재 체력이 0 이하가 되면 캐릭터가 죽으며 더 이상 체력을 회복할 수 없습니다.
당신은 붕대감기 기술의 정보, 캐릭터가 가진 최대 체력과 몬스터의 공격 패턴이 주어질 때 캐릭터가 끝까지 생존할 수 있는지 궁금합니다.
붕대 감기 기술의 시전 시간, 1초당 회복량, 추가 회복량을 담은 1차원 정수 배열 bandage와 최대 체력을 의미하는 정수 health,
몬스터의 공격 시간과 피해량을 담은 2차원 정수 배열 attacks가 매개변수로 주어집니다.
모든 공격이 끝난 직후 남은 체력을 return 하도록 solution 함수를 완성해 주세요.
만약 몬스터의 공격을 받고 캐릭터의 체력이 0 이하가 되어 죽는다면 -1을 return 해주세요.
제한 사항
- bandage는 [시전 시간, 초당 회복량, 추가 회복량] 형태의 길이가 3인 정수 배열입니다.
- 1 ≤ health ≤ 1,000
- 1 ≤ attacks의 길이 ≤ 100
문제 풀이
접근 방법
- 플레이어의 회복량은 두가지로 나뉜다 -> 초당 회복량 + 기술 시전 회복량
- 최대 체력이 존재한다 -> 최대 체력을 넘는 회복을 할 수 없다
- 현재 체력이 0이하가 되면 플레이어는 사망한다 -> 공격받아 체력이 0이하가 되면 -1을 반환
코드
public class P_250137 {
public static int solution(int[] bandage, int health, int[][] attacks) {
// bandage [시전시간, 초당 회복량, 추가 회복량]
// health 최대 체력
// attacks [공격시간, 피해량]
// 현재 체력 -> 초기 체력을 최대 체력으로 초기화
int playerHealth = health;
// 현재 시간
int curSec = 0;
// 회복 시간, 총 회복량
int h_sec, heal;
// 공격 반영
for(int[] attack : attacks) {
// 공격받기 전까지 힐 할 수 있는 시간
h_sec = attack[0] - curSec -1;
// 힐 시간이 0이 아닐 경우에만 힐량 계산
if(h_sec!=0) {
// 총 힐량 = 초당 힐량 + 기술 힐량 (힐 시간동안 기술 시전 횟수 * 기술 시전 힐량)
heal = h_sec*bandage[1] + (h_sec/bandage[0])*bandage[2];
// 현재 체력 계산 (현재 체력이 최대 체력보다 커지면 안된다)
playerHealth = Math.min(playerHealth + heal, health);
}
// 몬스터 피해량 계산
playerHealth -= attack[1];
// 플레이어의 피가 0이하로 떨어지면 -1 반환
if(playerHealth <= 0) {
return -1;
}
// 현재 시간을 공격 받은 시간으로 업데이트
curSec = attack[0];
}
// 플레이어 체력 반환
return playerHealth;
}
}
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/JAVA] 250121번 데이터 분석 (1) | 2024.10.31 |
---|---|
[프로그래머스/JAVA] 250125번 이웃한 칸 (1) | 2024.10.30 |
[프로그래머스/JAVA] 92334번 신고 결과 받기 (3) | 2024.10.30 |
[프로그래머스/JAVA] 340213번 동영상 재생기 (1) | 2024.10.30 |
[프로그래머스/JAVA] 340199번 지폐 접기 (3) | 2024.10.30 |

dundun213 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!