728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/250137
풀이 방법
0. 공격배열 맵으로 치환하여 활용
1. 캐릭터 객체를 사용하여 상태 관리 및 메서드 진행
2. 마지막 공격 인덱스를 뽑아서 반복문
내 코드(JAVA)
import java.util.HashMap;
class Character {
private int currHealth; // 현재 체력
private final int maxHealth; // 최대 체력
private int continuousTime = 0; // 연속 성공
public Character(int health) {
this.currHealth = health;
this.maxHealth = health;
}
public void receiveAttack(int damage) {
currHealth -= damage;
continuousTime = 0;
}
public void heal(int[] bandage) {
int successSkillTime = bandage[0];
int normalHeal = bandage[1];
int successHeal = bandage[2];
continuousTime++;
currHealth += normalHeal;
if (successSkillTime == continuousTime) {
currHealth += successHeal;
continuousTime = 0;
}
if (currHealth > maxHealth) {
currHealth = maxHealth;
}
}
public boolean isOver() {
return currHealth <= 0;
}
public int getHealth() {
return currHealth;
}
}
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int answer = 0;
int lastAttack = 0;
Character character = new Character(health);
HashMap<Integer, Integer> attackMap = new HashMap<>();
for (int[] attack : attacks) {
attackMap.put(attack[0], attack[1]);
lastAttack = Math.max(lastAttack, attack[0]);
}
int i = 1;
while (i <= lastAttack) {
if (attackMap.containsKey(i)) {
character.receiveAttack(attackMap.get(i));
} else {
character.heal(bandage);
}
if (character.isOver()) {
answer = -1;
break;
}
answer = character.getHealth();
i++;
}
return answer;
}
}
너무 복잡하게 푼 것 같기도 하고..?
728x90
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/JAVA] 할인 행사 (0) | 2024.07.20 |
---|---|
[프로그래머스/JAVA] 예상 대진표 (0) | 2024.06.29 |
[LeetCode/JAVA] 20. Valid Parentheses (0) | 2023.12.03 |
[프로그래머스/JAVA] [PCCE 기출문제] 10번 / 데이터 분석 (1) | 2023.11.28 |
[프로그래머스/JAVA] 숫자 짝꿍 (0) | 2023.11.16 |
댓글