|
| 1 | +```java |
| 2 | +import java.io.BufferedReader; |
| 3 | +import java.io.IOException; |
| 4 | +import java.io.InputStreamReader; |
| 5 | +import java.util.*; |
| 6 | +/* |
| 7 | +1 3 100 -> 천장(100/현 용사의 공격력)번을 공격해야 몬스터가 죽는다. |
| 8 | +현 용사의 공격력이 10이면 10번때려야 몬스터가 죽는다. -> 따라서 용사는 몬스터공격력 * (10-1)공격을 견뎌야한다. |
| 9 | +-> 이때 해당 용사의 현재체력이 최소 몬스터공격력 * 9 + 1 이어야함. |
| 10 | +현 용사의 공격력이 6이라면 천장(100/6) 17 때려야 몬스터가 죽는다. -> 따라서 용사는 몬스터공격력 * (17 - 1) 공격을 견뎌야한다. |
| 11 | +-> 이때 해당 용사의 현재체력이 최소 몬스터공격력 * 16 + 1 이어야함. |
| 12 | + */ |
| 13 | +public class Main{ |
| 14 | + private static int N; |
| 15 | + private static int InitialAttack; |
| 16 | + |
| 17 | + public static void main(String[] args) throws IOException { |
| 18 | + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); |
| 19 | + ArrayList<int[]> MonsterRooms = new ArrayList<>(); |
| 20 | + // [0]: 해당 방에서의 현 공격력 |
| 21 | + // [1]: 해당 방 몬스터의 공격력 |
| 22 | + // [2]: 해당 방 몬스터의 초기체력 |
| 23 | + // [3]: 해당 방까지 입장하였을때 회복한 체력의 총수 |
| 24 | + String[] temp = br.readLine().split(" "); |
| 25 | + N = Integer.parseInt(temp[0]); |
| 26 | + InitialAttack = Integer.parseInt(temp[1]); |
| 27 | + int attack = InitialAttack; |
| 28 | + int diffHp = 0; |
| 29 | + for(int i = 0; i < N; i++){ |
| 30 | + temp = br.readLine().split(" "); |
| 31 | + switch(temp[0] ){ |
| 32 | + case "1" ->{ |
| 33 | + MonsterRooms.add(new int[]{attack, Integer.parseInt(temp[1]), Integer.parseInt(temp[2]), diffHp}); |
| 34 | + diffHp = 0; |
| 35 | + } |
| 36 | + case "2" ->{ |
| 37 | + diffHp += Integer.parseInt(temp[2]); |
| 38 | + attack += Integer.parseInt(temp[1]); |
| 39 | + } |
| 40 | + } |
| 41 | + } |
| 42 | + |
| 43 | + int mustEndMinHp = 0; // 다음 방을 클리어하기위해 현재 방에서 반드시 끝마칠때 최소 이 hp는 넘어야함 |
| 44 | + for(int i = MonsterRooms.size() - 1; i>=0; i--){ |
| 45 | + int[] m = MonsterRooms.get(i); |
| 46 | + int attack = m[0]; |
| 47 | + int monsterAttack = m[1]; |
| 48 | + int initialMonsterHp = m[2]; |
| 49 | + int healedHp = m[3]; |
| 50 | + |
| 51 | + int mustAttackCount = (int)Math.ceil(initialMonsterHp / (double)attack); |
| 52 | + int minHp = (mustAttackCount - 1) * monsterAttack + 1;//해당 방을 클리어하기 위해 필요한 최소 hp |
| 53 | + mustEndMinHp = minHp - healedHp; |
| 54 | + } |
| 55 | + br.close(); |
| 56 | + } |
| 57 | +} |
| 58 | +/* |
| 59 | +1 1 20 에 mustEndMinHp 가 39여야함. -> 몬스터를 잡고나서 남은 체력이 반드시 39이상이어야한다는뜻 |
| 60 | +몬스터를 7번때려야함.따라서 용사는 6번 공격을 버텨야하고, 몬스터공격력 * 6의 총 데미지를 받음. |
| 61 | +따라서 초기 체력이 mustEndMinHp + 1*6 = 45여야함. |
| 62 | + */ |
| 63 | +``` |
0 commit comments