구름LEVEL
난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다.
level.goorm.io
===문제 설명===
구름-그라운드 게임에는 통증이라는 시스템이 있다.
게임 안에는 통증 수치를 감소시켜 주는 아이템이 3종류가 있다.
아이템의 이름은 bandage, medicine, painkiller 이고, 각 아이템을 사용 시 1, 7, 14 만큼 통증 수치를 감소시켜 준다.
플레이어는 적과의 전투에서 피해를 입어 현재 N의 통증 수치를 가지고 있다.
플레이어가 통증 수치를 0으로 줄이기 위해 필요한 아이템의 최소 개수를 구해보자.
단, 사용했을 때 통증 수치가 0보다 작아지는 아이템은 사용할 수 없음에 유의합시다.

🌟 T I P 🌟
- 현재 상태에서 최고의 선택을 찾아 선택하는 그리디(GREEDY:탐욕법)를 사용합니다.
- 돈을 셀 때와 마찬가지로 pain을 가장 큰 단위수인 painkiller(14)를 사용할 수 있는지 확인해 모두 사용하고, 그다음 medicine(7)을 사용할 수 있을 만큼 모두 사용하고, 그 이후에 bandage(1)을 사용해 pain을 0으로 만들어 줍니다.
🔖 풀이과정
1. 아이템 사용 횟수를 저장할 answer를 만들고, 각 아이템의 통증 감소 수치를 저장할 배열 items를 만들어줍니다.
int answer=0;// 아이템 사용 최소 갯수
//통증 감소 수치
int[] items = {14,7,1}; // painkiller, medicine, bandage
2. painkiller > medicine > bandage 순으로 아이템을 가져와서 해당 아이템을 사용할 수 있을 만큼 사용해 줍니다.
사용한 아이템 갯수는 answer에 더해주고, item을 사용해 치료된 후의 통증을 다시 저장해 줍니다.
//저장된 item 순서대로 하나씩 가져옴
for(int i=0;i<items.length;i++){
//item을 사용할 수 있을 만큼 사용한다는 것은
//pain-items[i]>0일 때 (pain-items[i])*cnt 하는 것입니다.
//따라서, pain/item의 몫은 item을 사용할 수 있는 최대한의 갯수 입니다.
answer+=pain/items[i];//answer = answer + pain/items[i];
//pain을 item으로 나눈 나머지 -> 남은 통증
pain%=items[i];//pain = pain % items[i]
}
3. pain이 0이 되었을 때 사용한 아이템의 개수 answer를 출력해 줍니다.
전체 코드
import java.io.*;
class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int pain = Integer.parseInt(br.readLine());//통증
int answer=0;// 아이템 사용 최소 갯수
int[] items = {14,7,1}; //painkiller, medicine, bandage
// item을 순서대로 가져옵니다.
for(int i=0;i<items.length;i++){
//item을 최대 몇 개 사용할 수 있는지 구하기
//pain/item(몫)
answer+=pain/items[i];//answer = answer + pain/items[i]
//item을 사용하고 난 후의 남은 통증 (나머지)
pain%=items[i];//pain = pain % items[i];
}
System.out.println(answer);
}
}
후기
별이 2개짜리 문제라지만 사실은 1개 정도로 느껴지는 문제네요.
그렇지만 그리디 관점에서 반복문을 한 번도 사용하지 않고 풀어야 해서 그 부분이 조금 어려운 것 같습니다.!
'Algorithms(CT) > Goorm' 카테고리의 다른 글
| [구름톤 챌린지] Day12 발전기 (Java) (0) | 2023.08.29 |
|---|---|
| [구름톤 챌린지] Day11 통증 (2) (0) | 2023.08.29 |
| [구름톤 챌린지] Day7 구름 찾기 깃발 (Java) (0) | 2023.08.23 |
| [구름톤 챌린지] Day5. 이진수 정렬 (0) | 2023.08.19 |
| [구름톤 챌린지] Day1. 운동 중독 플레이어 (Java) (0) | 2023.08.16 |