코딩테스트/프로그래머스
[ 프로그래머스 JAVA ] PCCP 기출문제 1번 붕대 감기
또리또리똘
2024. 1. 7. 21:29
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/250137
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
걸린 시간 33분
피드백
- 이런 문제는 잘 정리해서 푸는게 핵심일듯..
물론 다른 문제도 주석처리 이런거 꼼꼼하게 하는게 좋지만
문제
붕대 감기
t 초 동안 붕대를 감음
1초마다 x만큼 회복
t초 연속으로 붕대 감는데 성공하면 y만큼 체력 추가 회복
최대 체력보다 높아질 수 는 없음
몬스터에게 공격 당하면 기술 취소
공격을 당하는 순간에는 체력 회복 x
취소 당하는 즉시 붕대 감기를 다시 사용하고 연속 성공 시간이 0
공격 받으면 정해진 피해량 만큼 현재 체력이 줄어듬
모든 공격이 끝난 후 남게 되는 체력을 출력
현재 체력이 0 이하가 되면 캐릭터 사망 체력회복 x
붕대 감기 기술의 정보로
캐릭터가 가진 최대 체력과 몬스터의 공격 패턴이 주어지면 캐릭터가 끝까지 생존할 수 있는지
캐릭터 죽으면 -1
bandage [ 시전 시간 , 초당 회복량 , 추가 회복량 ]
health 최대 체력
attacks [ 공격 시간 , 피해량 ]
공격시간은 오름차순 정렬
공격 시간은 모두 다 다름
주석 참고
public class Pro250137 {
public static void main(String[] args) {
System.out.printf("" + solution(new int [] { 5 , 1 , 5 } , 30 , new int[][] { {2, 10}, {9, 15}, {10, 5} ,{11, 5} }));
}
static int solution( int[] bandage , int health , int[][] attacks){
int answer = 0;
int last_time = attacks[attacks.length-1][0]; // 마지막 공격 시간
int now_h = health; // 현재 체력
int a_idx = 0; // 공격한 횟수
int h_idx = 0; // 회복한 횟수
int si_time = bandage[0]; // 시전 시간
int healing = bandage[1]; // 초당 회복량
int b_healing = bandage[2]; // 추가 회복량
// 마지막 공격까지 시간 흐름 i 는 턴을 의미함
for (int i = 1; i <= last_time ; i++) {
// 공격 시간과 턴이 같으면
if (attacks[a_idx][0] == i){
now_h -= attacks[a_idx][1]; // 현재 체력에서 공격데미지 차감
a_idx++; // 공격 횟수 +1
h_idx = 0; // 시전 횟수 초기화
// 현재 체력이 0 이하 일 경우 사망
if (now_h <= 0){
return -1;
}
}
// 공격을 당하지 않았을 경우
else {
// 현재 체력이 총 체력보다 작으면
if (now_h < health){
h_idx++; // 연속 회복 횟수 +1
now_h += healing; // 현재 체력에서 초당 회복량 더하기
if (h_idx == si_time){
now_h += b_healing;
h_idx =0;
}
if (now_h > health){ // 현재 체력이 총 체력 보다 높을 경우
now_h = health; // 현재 체력 총 체력과 같음
}
}
}
}
answer = now_h;
return answer;
}
}
728x90