- 내 방법 풀이
- 게임에 익숙해서, 프로세스를 이해하기 쉬웠던 문제였다. 조건을 3개로 나눠, 순서대로 최대체력, 공격 유무, 추가 회복 유무에 대해서 생각했다. 이후 제한 조건을 하나씩 확인하며 추가해 나갔다.
- 잘하는 사람일수록 선언할 변수를 줄이는 방법으로 코드를 짤 것 같다. 내 코드는 내가 이해하기는 쉬웠지만 다른 사람의 평가는 어떨지 궁금한데, 일단 시간의 흐름에 따라 체력의 변화와 공격의 유무를 적용시키는 코드를 짰다. 마지막 공격 이후에 체력을 리턴하면 됨으로, while 문으로 시작했다.
- 만약 게임에 익숙하지 않았다면 생각보다 중간에 빼먹는 계산이 생길수 밖에 없었을 거 같다.
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int time = 0, bandagingTime = 0, attackNum = 0;
int lastAttackTime = attacks[attacks.length-1][0];
int maxHealth = health;
// 붕대의 회복이 다 시전되면 추가회복이 있음.
// 체력은 최대 체력이 정해져 있음
// 마지막 공격때까지 time의 흐름에 따라 코드를 짜기
// 공격 시 붕대의 시전시간이 초기화
while (time <= lastAttackTime) {
if (health > maxHealth) health = maxHealth; // 최대 체력 조정
if (time == attacks[attackNum][0]) { // 공격 유뮤 확인
bandagingTime = 0; // 붕대 시전시간 초기화
health -= attacks[attackNum][1]; // 체력 깎기
attackNum++;
} else { // 공격이 없고
if (health <= maxHealth) { // 최대체력보다 아래라면 회복 시작
health += bandage[1]; // 초당 회복량 회복
bandagingTime++; // 시전 시간 증가
}
}
if (health <= 0) return -1; // 체력 확인
if (bandagingTime == bandage[0]) { // 연속 회복 성공시 추가 회복
health += bandage[2];
bandagingTime = 0;
}
time++; // 시간 증가
}
return health;
}
}
- 다른 사람 방법 풀이
- 새로 나온 문제라 그런지 내 풀이와 딱히 다른 풀이는 보이지 않았다.