https://school.programmers.co.kr/learn/courses/30/lessons/250137
게임을 하고 있는데 붕대를 감아 체력을 회복한다고 한다.
변수가 많으니 하나씩 잘 트랙 해봅시다
규칙
변수
결괏값
time을 하나씩 증가시키면서 공격을 받는 시간인지 확인 (반복문 이용)
그 시간에 할 수 있는 것은 1 아니면 2다
1. 체력 회복
2. 공격 받기
-> if-else문 사용하여 둘 중 하나의 조건에만 해당하도록 하기
con 변수를 사용하여 연속 회복 성공의 초를 셈
반복문이 끝나는 조건
++ 만약 체력이 0이하로 떨어지면 즉시 -1 return!!!
이거 때문에 테스트케이스 2개가 자꾸 실패해서 멘붕,,, ㅎㅎ
이를 고려하여 코드를 짜봅시다
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
// 초기 체력을 answer로 초기화 (반환하는 것은 마지막에 남아있는 체력)
int answer = health;
// 0초일 때는 아무런 행동도 하지 않기 때문에 초기 시간을 1로 초기화
int time = 1;
// attacks 배열에 접근하는 변수 arr (time의 수가 attacks의 공격시간과 같으면 공격을 받도록 if문 설정)
int arr = 0;
// 연속 성공 시간을 세는 변수
int con = 0;
// 마지막 공격을 받을 때까지 반복
while (time <= attacks[attacks.length-1][0]){
만약 지금의 시간이 공격을 받는다면 if문 실행
if (attacks[arr][0] == time){
// 해당 시간의 공격력만큼 체력 줄이기
answer -= attacks[arr][1];
// 만약 공격을 받고 체력이 0 이하로 떨어지면 즉시 -1 return
if (answer <= 0) return -1;
// 다음 변수로 접근
arr++;
// 연속 성공 시간을 0으로 초기화
con = 0;
}
else {
// 연속 성공 시간을 1씩 추가
con++;
// x 만큼 체력 증가
answer += bandage[1];
// 만약 연속 성공 시간이 t에 도달했다면 체력 증가 후 con 0으로 초기화
if (con == bandage[0]){
answer += bandage[2];
con = 0;
}
// 만약 최대 체력보다 더 큰 값이 입력되었으면 health까지로 변수 크기 제한하기
if (answer > health)
answer = health;
}
// time 값 증가
time++;
}
return answer;
}
}
역시 프로그래머스에서 코딩하면 어디서 오류가 뜨는지 알아내기 어렵다..
테스트 케이스를 다 돌렸는데 딱 2개만 실패하고 왜 실패했는지 안 알려줘서 다시 한 번 문제를 꼼꼼히 읽었다 ㅠㅠ
그래도 경우의 수를 잘 나누면 하기 좀 괜찮았다
아 그리고 실행결과 단계별로 하나씩 보여주는 걸 더 참고해야겠다..
문제에서 알려주는 것에는 다 이유가 있는 법