suheang

[백준] | JAVA, 자바 | 13717번 - 포켓몬 GO 본문

알고리즘

[백준] | JAVA, 자바 | 13717번 - 포켓몬 GO

suheang 2024. 4. 20. 20:40

https://www.acmicpc.net/problem/13717

 

13717번: 포켓몬 GO

첫 번째 예제에서 지우가 어떻게 뿔충이(Weedle)를 진화시켰는지 보자. 처음 진화를 위해 지우는 12개의 사탕을 사용하였지만 2개를 돌려받아 32개의 사탕이 남는다  (42-12+2). 두 번째 진화 후엔 22

www.acmicpc.net


문제 요약 :

지우가 Pi 라는 포켓몬을 진화시키기 위해서는 해당 포켓몬의 Ki 개의 사탕이 필요하다. 진화가 된 후에는 2개의 사탕을 돌려받는다. 각 포켓몬은 그들 종의 사탕으로만 진화할 수 있다.

지우는 N종의 포켓몬이 있고 Pi 라는 포켓몬의 사탕은 Mi 개를 가지고 있으며 지우는 진화시킬 수 있는 포켓몬의 총 마리수를 궁금해한다.

또한, 지우는 가장 많이 진화시킬 수 있는 포켓몬이 무엇인지 알고 싶어한다. 만약 그런 포켓몬들이 여러 종이 있다면 도감번호가 가장 작은 포켓몬을 출력한다.

( 첫 번째 줄엔 진화시킬 수 있는 포켓몬의 총 마리수를 출력한다.

두 번째 줄엔 가장 많이 진화시킬 수 있는 포켓몬의 이름을 출력한다. )


문제 풀이 :

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        String[] pokemon = new String[n];
        int[] needCandi = new int[n];
        int[] haveCandi = new int[n];
        int[] pokemonEv = new int[n];
        
        for (int i = 0; i < n; i++) {
            pokemon[i] = br.readLine();
            StringTokenizer st = new StringTokenizer(br.readLine());
            needCandi[i] = Integer.parseInt(st.nextToken());
            haveCandi[i] = Integer.parseInt(st.nextToken());
        }

        int evolution = 0;

        for (int i = 0; i < n; i++){
            while (haveCandi[i] >= needCandi[i]) {
                evolution++;
                pokemonEv[i]++;
                haveCandi[i] = haveCandi[i] - needCandi[i] + 2;
            }
        }
        
        int maxEv = 0;
        int maxIndex = 0;
        for (int i = 0; i < n; i++) {
            if (pokemonEv[i] > maxEv) {
                maxEv = pokemonEv[i];
                maxIndex = i;
            }
        }

        System.out.println(evolution);
        System.out.println(pokemon[maxIndex]);
    }
}

 

1. 포켓몬의 종류 수 N 입력받기

2. 포켓몬 이름과 가지고 있는 사탕 수, 진화하는데 필요한 사탕 수, 진화 횟수를 저장할 배열 생성

3. 포켓몬 이름과 가지고 있는 사탕 수, 진화하는데 필요한 사탕 수를 입력받기

4. 총 진화 회수를 저장하기 위해 변수 evolution 생성

5. 가지고 있는 사탕이 진화하는데 필요한 사탕의 개수보다 많거나 같다면 evolution을 1 올려주고 해당 포켓몬 진화 횟수 1 증가, 가지고 있는 사탕의 개수를 진화에 필요한 사탕의 개수만큼 빼고 사탕 2개 추가

6. 포켓몬 진화 횟수가 가장 높은 포켓몬의 index 값을 저장

7. 총 진화 횟수와 가장 많이 진화시킬 수 있는 포켓몬의 이름을 출력