import java.util.ArrayList;
public class Q2 {
public static void main(String[] args) {
int 돌의내구도[] = {5, 3, 4, 1, 3, 8, 3};
독[] 독배열 = {
new 독("루비독", "95년생", 3, 4),
new 독("피치독", "95년생", 3, 3),
new 독("씨-독", "72년생", 2, 1),
new 독("코볼독", "59년생", 1, 1)
};
solution(돌의내구도, 독배열);
}
public static void solution(int[] 돌의내구도, 독[] 독배열) {
ArrayList<String> answer = new ArrayList<String>();
for (독 i : 독배열) {
int 독의위치 = 0;
boolean flag = true;
while (독의위치 < 돌의내구도.length) {
독의위치 += i.점프력;
if (독의위치 > 돌의내구도.length) {
break;
}
돌의내구도[독의위치 - 1] -= i.몸무게;
if (돌의내구도[독의위치 - 1] < 0) {
flag = false;
break;
}
}
if (flag) {
answer.add(i.이름);
}
}
System.out.println(answer);
}
}
class 독 {
String 이름;
String 나이;
int 점프력;
int 몸무게;
public 독 (String 이름, String 나이, int 점프력, int 몸무게) {
this.이름 = 이름;
this.나이 = 나이;
this.점프력 = 점프력;
this.몸무게 = 몸무게;
}
}
import java.util.ArrayList;
public class Q2 {
public static void main(String[] args) {
int 돌의내구도[] = {5, 3, 4, 1, 3, 8, 3};
독[] 독배열 = {
new 독("루비독", "95년생", 3, 4),
new 독("피치독", "95년생", 3, 3),
new 독("씨-독", "72년생", 2, 1),
new 독("코볼독", "59년생", 1, 1)
};
solution(돌의내구도, 독배열);
}
public static void solution(int[] 돌의내구도, 독[] 독배열) {
ArrayList<String> answer = new ArrayList<String>();
for (독 i : 독배열) {
int 독의위치 = 0;
boolean flag = true;
while (true) {
독의위치 += i.점프력;
if (독의위치 > 돌의내구도.length) {
break;
}
돌의내구도[독의위치 - 1] -= i.몸무게;
if (돌의내구도[독의위치 - 1] < 0) {
flag = false;
break;
}
}
if (flag) {
answer.add(i.이름);
}
}
System.out.println(answer);
}
}
class 독 {
String 이름;
String 나이;
int 점프력;
int 몸무게;
public 독 (String 이름, String 나이, int 점프력, int 몸무게) {
this.이름 = 이름;
this.나이 = 나이;
this.점프력 = 점프력;
this.몸무게 = 몸무게;
}
}
1. 문제 파악
- 독이 점프를 시작할 곳은 0부터이고, 독의 점프력이 2라면 두 번째 돌을 밟아야 합니다. 하지만 돌의 위치를 중심으로 봤을 땐 인덱스가 0부터 시작해야 하므로 두 번째 돌은 1번 인덱스의 돌에 해당합니다.
- 독들이 차례대로 다리를 건너야 하는데 돌에는 내구도가 있기 때문에 돌을 밟을 때마다 독의 몸무게만큼의 내구도를 감소시켜야 합니다.
- 어떤 돌의 내구도가 0보다 작아서 해당 돌을 밟을 수 없을 때에도 독의 점프력에 따라 그 돌을 밟지 않고도 다리를 건널 수 있기 때문에 이 조건 또한 확인해야 합니다.
2. 풀이
- 모든 독을 확인해 봐야 하기 때문에 독의 수만큼 반복문을 돌려서 확인합니다.
- 독의 위치는 독의 점프력만큼 더합니다.
독의위치 += i.점프력;
if (독의위치 > 돌의내구도.length) {
break;
}
- 문제 설명에서 말씀 드렸던 것처럼 돌 배열의 인덱스를 유념하여 독의 위치 -1에 해당하는 돌의 내구도에서 독의 무게만큼 빼주어 돌의 내구도를 감소시킵니다.
돌의내구도[독의위치 - 1] -= i.몸무게;
- 돌의 내구도가 0보다 작은지 확인하여 물에 빠지는 독을 flag 변수를 false로 갱신해 줍니다.
if (돌의내구도[독의위치 - 1] < 0) {
flag = false;
break;
}
- flag가 true이면 다리를 무사히 건넜다는 의미이기 때문에 answer에 추가합니다.
if (flag) {
answer.add(i.이름);
}