728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/250137
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
해설
매 초마다 몬스터가 공격을 하는 여부를 판단하며 문제를 해결할 수 있지만
붕대의 회복은 1초에 계속되며 특정한 주기별로 한번씩 추가 회복이 된다는 점을 생각하면 결국 계산이 필요한 시점은
몬스터에게 공격당하는 시점 뿐입니다.
따라서 몬스터의 공격이 담긴 배열을 기준으로 for문을 돌리며 문제 내용을 구현하여 해결할 수 있었습니다.
1. 지금까지 회복된 양을 반영하기
2. 몬스터에게 공격을 맞기
3. 체력이 0이하라면 -1을 리턴하기
이때 회복된 양을 반영하기 위해서는 이전 사건과 현재 공격을 받은 시간의 차이가 필요하므로 이전 사건의 시간을 저장하는 time 변수를 선언하여 계산에 편의를 둡니다.
붕대에 의한 회복은 이전 사건과의 시간차(timediff) * 초당 회복량 + timediff / 시전시간 * 추가회복량 으로 얻을 수 있습니다.
주의점
- 시간의 차이에서 몬스터에게 공격당한 시간은 포함시키지 않는다.
코드
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int answer = 0;
// 사건이 일어난 가장 최근 시간
int time = 0;
// 현재 체력
int curh = health;
// 이전 사건(시작 또는 몬스터의 최근 공격)과 현재 공격의 시간차
int timediff = 0;
for(int[] attack : attacks){
timediff = attack[0]-time-1;
curh = Math.min(curh+timediff*bandage[1] + timediff/bandage[0] * bandage[2], health);
curh -= attack[1];
time = attack[0];
if(curh<=0) return -1;
}
return curh;
}
}
728x90
'[IT] 코딩테스트 > [문제 및 풀이] 프로그래머스' 카테고리의 다른 글
[프로그래머스] (2024 KAKAO WINTER INTERNSHIP) 가장 많이 받은 선물 / 자바(Java) (1) | 2024.02.06 |
---|---|
[프로그래머스] PCCP 기출문제 3번 (아날로그 시계) / 자바(Java) (1) | 2024.01.05 |
[프로그래머스] PCCP 기출문제 2번 (석유 시추) / 자바(Java) (0) | 2024.01.03 |
[프로그래머스] 주차 요금 계산 / 자바(Java) (0) | 2023.11.07 |
[프로그래머스] 두 큐 합 같게 만들기 / 자바(Java) (0) | 2023.11.06 |