일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- sql
- Oracle
- python
- 프로그래머스자바
- 프로그래머스
- 2023년회고
- PCCP
- 코딩역량인증시험
- programmers
- 정보처리기사기출
- JavaPersistenceApi
- PCSQL
- JAVA.
- 코딩테스트
- DB
- 정보처리기사
- SQL개발자시험
- SQL개발
- springboot3
- 정처기
- 자바알고리즘
- PCCE
- 코테
- JPAdata
- 정보처리기사대비
- 개발자
- java
- 알고리즘
- 2024년정보처리기사
- 자바
Archives
- Today
- Total
똘이의 개발 Life
[ 프로그래머스 JAVA ] PCCP 기출문제 1번 붕대 감기 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/250137
걸린 시간 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
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[ 프로그래머스 JAVA ] 로또의 최고 순위와 최저 순위 (0) | 2024.01.08 |
---|---|
[ 프로그래머스 JAVA ] 바탕 화면 정리 (1) | 2024.01.08 |
[ 프로그래머스 JAVA ] 성격 유형 검사 (0) | 2024.01.08 |
[ 프로그래머스 JAVA ] 신규 아이디 추천 (1) | 2024.01.08 |
[ 프로그래머스 JAVA ] 가장 많이 받은 선물 풀이 (0) | 2024.01.04 |