개발에 AtoZ까지

[JAVA][D3] 11387. 몬스터 사냥 본문

코딩테스트 준비/SWEA

[JAVA][D3] 11387. 몬스터 사냥

AtoZ 개발자 2021. 3. 1. 16:55
반응형

문제 

용사가 몬스터를 공격할 때는 기본적으로 D만큼의 데미지를 입힌다. 여기에, 용사가 익힌 공격의 레벨 L에 따라 추가적인 데미지가 있는데,

지금까지 몬스터를 때린 횟수가 n번이라고 하면, 다음 공격이 몬스터에게 입히는 데미지는 D(1+nㆍL%)가 된다. %는 1/100을 의미한다.
지금까지 용사가 몬스터를 때린 횟수가 0번이라고 할 때, 앞으로 총 N번의 공격을 하면 몬스터에게 가한 총 데미지가 몇이 되는지 구하는 프로그램을 작성하라.

[입력]
첫 번째 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 세 정수 D, L, N(102 ≤ D ≤ 104, 0 ≤ L ≤ 100, 1 ≤ N ≤ 102)이 공백 하나로 구분되어 주어진다. D는 100의 배수로만 주어진다.


[출력]

각 테스트 케이스마다 용사가 몬스터에게 가한 총 데미지를 출력한다.

예시

 

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Solution
{
public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int T = Integer.parseInt(br.readLine());
		for(int i=1;i<=T;i++) {
			String[] str = br.readLine().split(" ");
			int D = Integer.parseInt(str[0]);		//데미지
			int intL = Integer.parseInt(str[1]);	//레벨
			float floatL =(float)intL/100;			//레벨/100 (퍼센트로 환산)
			int N = Integer.parseInt(str[2]);		//공격횟수
			System.out.println("#"+i+" "+recul(D,floatL,N));
		}
	}

	//재귀함수 사용
	/*
	 * ex) input 값이 100 4 3 일 경우에는
	 * 답을 구하는 과정을 보면100 + 100(1+1*0.03) + 100(1+2*0.03) ... 이런 식이다.
	 * 이렇게 공통된 부분이 있기 때문에 for문 보다는 재귀에 적합하다고 생각한다. 
	 */
	private static int recul(int d, float l, int n) {
		if(n==1) {
			return (int) (d*(1+(n-1)*(l/100)));
		}
		else {
			int val = Math.round(d*(1+(n-1)*l));
			return val + recul(d,l,n-1);
		}
	}
}
반응형
Comments