알고리즘/카카오 코드 페스티벌예선 2018

[백준 15953] - [카카오 코드 페스티벌 예선 2018] - 상금헌터 (JAVA)

팡스 2018. 12. 4. 17:01

문제 링크 : https://www.acmicpc.net/problem/15953



내 실력이 어디까지인지 확인해보고자 카카오 코드 페스티벌 예선 문제를 풀었다. 

아직은 카카오에 갈 실력이 안되나보다.


그나마 이 문제는 쉽다. 


2017년 본선진출자 100명 중 상금 수여 21명

순위 

상금 

인원 

1등 

500만 

2등 

300만 

3등 

200만 

4등 

50만 

5등 

30만 

6등 

10만 



2018년 본선진출자 64명 중 상금 수여 31명


순위 

상금 

인원 

1등 

512만 

2등 

256만 

3등 

128만 

4등 

64만 

5등 

32만 

16 



이 문제를 풀기 위해서 위의 상금 정보를 기반으로 배열을 만들었다.


public static int[] reward17 = {500, 300, 200, 50, 30, 10};

public static int[] people17 = {1, 2, 3, 4, 5, 6};

public static int[] reward18 = {512, 256, 128, 64, 32};

public static int[] people18 = {1, 2, 4, 8, 16};


배열을 기준으로 반복을 돌면서 입력받은 연도별 순위가 순위안에 속하면 상금을 추가했고 아니면 무시했다.


이문제를 풀때 자세히 봐야하는문장은 단, 진출하지 못했다면 a=0으로 둔다. 이 문장이다.

즉 a 혹은 b 값이 0일 경우 예외처리를 해주면 된다.


이 문제는 자신감을 갖게 해주기위한 문제였으리라 생각한다.


소스

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
    public static int[] reward17 = {500300200503010};
    public static int[] people17 = {123456};
    
    public static int[] reward18 = {5122561286432};
    public static int[] people18 = {124816};
    
    public static int TEN_THOUSAND = 10000;
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = null;
        
        int testCase = Integer.parseInt(br.readLine());
        
        StringBuilder sb = new StringBuilder();
        
        while(testCase-- > 0) {
            st = new StringTokenizer(br.readLine());
            
            int rank17 = Integer.parseInt(st.nextToken());
            int rank18 = Integer.parseInt(st.nextToken());
            
            int totalRank = getRank(rank17, rank18);
            
            sb.append(totalRank*TEN_THOUSAND + "\n");
        }
        System.out.println(sb.toString());
    }
    
    public static int getRank(int rank17, int rank18) {
        int totalReward = 0;
        
        int r = 0;
        for(int i=0; i < people17.length; i++) {
            r += people17[i];
            if(rank17 > 0 && rank17 <= r) {
                totalReward += reward17[i];
                break;
            }
        }
        
        r = 0;
        for(int i=0; i < people18.length; i++) {
            r+= people18[i];
            if(rank18 > 0 && rank18 <= r) {
                totalReward += reward18[i];
                break;
            }
        }
        
        return totalReward;
    }
}
cs