본문 바로가기
알고리즘

[프로그래머스/JAVA] 붕대감기

by 상후 2024. 4. 9.
728x90
반응형

 

 

https://github.com/ROUTINE-STUDY/Algorithm

알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.

문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/250137

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이 방법
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
반응형

댓글