Skip to content

Commit bd86ba4

Browse files
authored
Merge pull request #1708 from AlgorithmWithGod/LiiNi-coder
[20251218] BOJ / G4 / 드래곤 앤 던전 / 이인희
2 parents 8e6be22 + c52eb12 commit bd86ba4

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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

Comments
 (0)