프로그래머스 250137번 문제 "붕대 감기" [PCCP 기출문제] 1번 - 파이썬, 자바
[프로그래머스] 붕대 감기 [PCCP 기출문제] 1번 - [파이썬/python] [자바/java]
💻 문제 설명
어떤 게임에는 붕대 감기
라는 기술이 있습니다.
붕대 감기
는 t
초 동안 붕대를 감으면서 1초마다 x
만큼의 체력을 회복합니다. t
초 연속으로 붕대를 감는 데 성공한다면 y
만큼의 체력을 추가로 회복합니다. 게임 캐릭터에는 최대 체력이 존재해 현재 체력이 최대 체력보다 커지는 것은 불가능합니다.
기술을 쓰는 도중 몬스터에게 공격을 당하면 기술이 취소되고, 공격을 당하는 순간에는 체력을 회복할 수 없습니다. 몬스터에게 공격당해 기술이 취소당하거나 기술이 끝나면 그 즉시 붕대 감기
를 다시 사용하며, 연속 성공 시간이 0으로 초기화됩니다.
몬스터의 공격을 받으면 정해진 피해량만큼 현재 체력이 줄어듭니다. 이때, 현재 체력이 0 이하가 되면 캐릭터가 죽으며 더 이상 체력을 회복할 수 없습니다.
당신은 붕대 감기
기술의 정보, 캐릭터가 가진 최대 체력과 몬스터의 공격 패턴이 주어질 때 캐릭터가 끝까지 생존할 수 있는지 궁금합니다.
붕대 감기
기술의 시전 시간, 1초당 회복량, 추가 회복량을 담은 1차원 정수 배열 bandage
와 최대 체력을 의미하는 정수 health
, 몬스터의 공격 시간과 피해량을 담은 2차원 정수 배열 attacks
가 매개변수로 주어집니다. 모든 공격이 끝난 직후 남은 체력을 return 하도록 solution 함수를 완성해 주세요. 만약 몬스터의 공격을 받고 캐릭터의 체력이 0 이하가 되어 죽는다면 -1을 return 해주세요.
🚨 제한사항
bandage
는 [시전 시간
,초당 회복량
,추가 회복량
] 형태의 길이가 3인 정수 배열입니다.- 1 ≤
시전 시간
=t
≤ 50 - 1 ≤
초당 회복량
=x
≤ 100 - 1 ≤
추가 회복량
=y
≤ 100
- 1 ≤
- 1 ≤
health
≤ 1,000 - 1 ≤
attacks
의 길이 ≤ 100attacks[i]
는 [공격 시간
,피해량
] 형태의 길이가 2인 정수 배열입니다.attacks
는공격 시간
을 기준으로 오름차순 정렬된 상태입니다.attacks
의공격 시간
은 모두 다릅니다.- 1 ≤
공격 시간
≤ 1,000 - 1 ≤
피해량
≤ 100
!!!정답 주의!!!
🌟 소스 코드
[Python] 파이썬 코드
[Java] 자바 코드
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int cast_time = bandage[0]; // 시전 시간
int healing_per_second = bandage[1]; // 초당 회복량
int additional_healing = bandage[2]; // 추가 회복량
int max_health = health; // 최대 체력
int pre_attack_time = attacks[0][0]; // 이전 공격 시간
// attacks 순회 (attacks의 길이만큼)
for(int i=0; i<attacks.length; i++){
int attack_time = attacks[i][0]; // 공격 시간
int damage = attacks[i][1]; // 피해량
// (현재 공격 시간 - 이전 공격 시간)의 텀 동안에 체력 회복
int time_between = attack_time - pre_attack_time - 1;
if (time_between > 0){
health += (time_between * healing_per_second); // 초당 회복
health += ((time_between / cast_time) * additional_healing); // 추가 회복
if (health > max_health){
health = max_health;
}
}
// 체력에 데미지(피해량) 적용
health -= damage;
// 체력이 0이하 일 시 -1 반환
if (health <= 0){
return -1;
}
// 이전 시간 공격
pre_attack_time = attack_time;
}
// 남은 체력 반환
return health;
}
}
🏳🌈 테스트 결과
[Python] 파이썬 - 테스트 결과 | [Java] 자바 - 테스트 결과 |
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 데이터 분석 - [PCCE 기출문제] 10번 (20) | 2023.12.12 |
---|---|
[프로그래머스] 이웃한 칸 - [PCCE 기출문제] 9번 (11) | 2023.12.11 |
[프로그래머스] N개의 최소공배수 - Lv.2 (44) | 2023.11.10 |
[프로그래머스] 전화번호 목록 - Lv.2 (46) | 2023.11.09 |
[프로그래머스] k진수에서 소수 개수 구하기 - Lv.2 (48) | 2023.11.08 |