문제 (15953)상금 헌터
링크 : https://www.acmicpc.net/problem/15953
사용 언어 : JAVA
제이지는 자신이 코드 페스티벌에 출전하여 받을 수 있을 상금이 얼마인지 궁금해졌다. 그는 자신이 두 번의 코드 페스티벌 본선 대회에서 얻을 수 있을 총 상금이 얼마인지 알아보기 위해, 상상력을 발휘하여 아래와 같은 가정을 하였다.
제1회 코드 페스티벌 본선에 진출하여 a등(1 ≤ a ≤ 100)등을 하였다. 단, 진출하지 못했다면 a = 0으로 둔다.
제2회 코드 페스티벌 본선에 진출하여 b등(1 ≤ b ≤ 64)등을 할 것이다. 단, 진출하지 못했다면 b = 0으로 둔다.
제이지는 이러한 가정에 따라, 자신이 받을 수 있는 총 상금이 얼마인지를 알고 싶어한다.
입력 값
- 첫 번째 줄에 제이지가 상상력을 발휘하여 가정한 횟수 T(1 ≤ T ≤ 1,000)가 주어진다.
- 다음 T개 줄에는 한 줄에 하나씩 제이지가 해본 가정에 대한 정보가 주어진다. 각 줄에는 두 개의 음이 아닌 정수 a(0 ≤ a ≤ 100)와 b(0 ≤ b ≤ 64)가 공백 하나를 사이로 두고 주어진다.
출력 값
- 각 가정이 성립할 때 제이지가 받을 상금을 원 단위의 정수로 한 줄에 하나씩 출력한다. 입력이 들어오는 순서대로 출력해야 한다.
내 생각
1. 초기 생각
- 일단 문제에서 주어진 제 1회, 2회의 등수당 상금과 인원 정보를 각각 2차원 배열로 저장. 그리고 받은 a, b 값을 가지고 2차원 배열의 인원 수와 비교하여 a(혹은 b)가 festival[*][0..] 중 어느 사이에 속하는지 비교 후 출력
2. 개선
진출하지 못한 경우를 생각을 안해서..ㅎ a==0, b==0일 경우를 따로 제외해주었다.
그리고 진짜 멍청하게 메인 클래스 명을 Main으로 제출하는걸 까먹어서(ㅋㅋㅋㅋㅋ큐ㅠ) 한.. 세번정도 컴파일 에러 떴었다ㅠ 백준 너무 안했어..
최종 코드
import java.util.Scanner;
public class Main{
static int fstFestival[][] = {{500, 1}, {300, 2}, {200, 3},
{50, 4}, {30, 5}, {10, 6}};
static int sndFestival[][] = {{512, 1}, {256, 2}, {128, 4},
{64, 8}, {32, 16}};
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int T = input.nextInt();
int[] alpha = new int[T];
int[] beta = new int[T];
int[] totalReward = new int[T];
for(int i=0; i<T; i++){
alpha[i] = input.nextInt();
beta[i] = input.nextInt();
}
for(int i=0; i<T; i++){
totalReward[i] = calcTotalReward(alpha[i], beta[i]);
System.out.println(totalReward[i]);
}
}
public static int calcTotalReward(int a, int b){
int result = 0;
result += getReward(a, b);
result *= 10000;
return result;
}
public static int getReward(int rankA, int rankB){
int temp=0;
int cost=0;
for(int i=0; i<6; i++){
temp += fstFestival[i][1];
if((rankA <= temp)&&(rankA != 0)){
cost += fstFestival[i][0];
break;
}
}
temp=0;
for(int i=0; i<5; i++){
temp += sndFestival[i][1];
if((rankB <= temp)&&(rankB != 0)){
cost += sndFestival[i][0];
break;
}
}
return cost;
}
}
느낀점
- 함수명, 변수명 정하는거 너무 어려움