코딩테스트/구름톤 챌린지

[Java] 구름톤 챌린지 3주차 : 통증 (2)

이덩우 2023. 8. 28. 16:46

- 문제설명

 

 


- 해결과정

문제의 조건에서 두 아이템의 이름이 A, B일때 B가 회복시켜주는 양이 A보다 더 크다고 나와있다.

이를 이용해 문제를 풀어보자.

 

아이템 사용량이 가장 최소가 되는 상황부터 아이템 사용량이 가장 최대가 되는 상황으로 올라가면서 각 단계별로 피로도를 0으로 만들 수 있는지 판단하면 된다.

--> 가장 먼저 피로도를 0으로 만들 수 있는 상황을 만난다면 해당 경우가 아이템을 가장 적게 사용해 피로도를 0으로 만드는 것이다.

 

아이템 사용량이 가장 최소가 되는 상황이란 누적 피로도를 아이템 B의 회복량으로 나눈 몫만큼 아이템 B를 사용하고 그 나머지는 아이템 A로 피로를 회복하는 상황이다.

이 상황부터 아이템 B의 사용량을 하나 줄이고, 다시 나머지를 아이템 A로 채워 피로도를 0으로 만들 수 있는지 확인하고 또 반복한다.

 

마지막까지가서 아이템 B는 사용하지도 않고 누적 피로도를 전부 아이템 A로 채울 수 없다면 -1을 출력하면 된다.

 

 


- 솔루션

import java.io.*;
import java.util.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));		
		int N = Integer.parseInt(br.readLine());
		StringTokenizer st = new StringTokenizer(br.readLine());
		int itemA = Integer.parseInt(st.nextToken());
		int itemB = Integer.parseInt(st.nextToken());
		int maxOfItemB = N / itemB;
		int result = -1;
		while(maxOfItemB >= 0) {
			int remain = N - maxOfItemB * itemB;
			if(remain % itemA == 0) {
				result = maxOfItemB + remain / itemA;
				break;
			}
			maxOfItemB--;
		}
		bw.write(Integer.toString(result));
		bw.flush();
		bw.close();
	}
}