반응형
내 풀이
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
// t초 동안 붕대를 감으면서 1초마다 x만큼의 체력을 회복함
// t초 연속으로 붕대를 감는데 성공하면 y만큼의 체력을 추가로 획득
// seconds == t -> +y
// 공격당하면 취소당하고
// 당하는 순간에는 붕대 못감음
// 취소되면 붕대감기 연속 성공 시간 0으로 초기화
// 피해량 만큼 줄어들고 0 이하면 죽고 체력 회복 안됨
// bandage = 붕대감기 기술 정보 [t,x,y] = [붕대감기 시전 시간, 초당 회복량, 추가 회복량]
// health = 최대 체력
// attacks = 공격 패턴 attacks[i] = [공격 시간, 피해량] //// attacks.length; < 공격 횟수
// 남은 체력을 리턴하고 0 이하면 -1 리턴
int concurrent_band_seconds = 0; // 연속 회복 시간
int attacked_health = health; //공격당한 체력 default 최대 체력
int current_seconds = 0; // 현재시간
int result = 0;
for(int [] attack : attacks){
while(true){
current_seconds++;
// System.out.println(current_seconds +" 현재 시간" + concurrent_band_seconds);
if(current_seconds == attack[0]){
attacked_health -= attack[1];
concurrent_band_seconds = 0;
// System.out.println("공격 당함! "+attacked_health +" : 남은 체력");
if(attacked_health <=0) {
return -1;
}
break;
}else{
if(attacked_health != health){
concurrent_band_seconds++;
attacked_health+=bandage[1];
if(concurrent_band_seconds == bandage[0]){
attacked_health+=bandage[2];
concurrent_band_seconds=0;
}
if(attacked_health > health) attacked_health = health;
// System.out.println("힐!!! "+attacked_health +" : 남은 체력");
}
}
// System.out.println(current_seconds+" " + attacks[attacks.length-1][0] + " ??");
}
if(current_seconds == attacks[attacks.length-1][0]) {
return attacked_health;
}
}
return result;
}
}
다른사람 풀이
import java.util.*;
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int cnt = bandage[0]; // 추가 체력 기준
int now = health; // 현재 체력
int std = 0; // 마지막으로 공격당한 시간
int v1, v2; // 추가 체력 받을 수 있나?
for (int[] atk: attacks) {
if (now <= 0) {
return -1;
}
v1 = atk[0] - std - 1; // 시간 차이
v2 = v1 / cnt; // 추가 체력 회수
// 맞기 직전까지의 체력 정산
std = atk[0];
now = Math.min(health, now + (v1 * bandage[1]));
now = Math.min(health, now + (v2 * bandage[2]));
now -= atk[1];
}
return now <= 0 ? -1 : now;
}
}
우선 나는 문제 그대로 차근차근 읽으면서 그대로 코드로 풀어나갔다..
좀 더 간략하고 가독성 좋게 풀 수 있도록 사고의 폭을 더 넓혀야겠다..!
반응형