문제 링크 - 백준 : 포켓몬 GO

어렵지 않은 구현 문제

문제 설명

  1. 2N개의 데이터 세트가 제공된다
    1. 포켓몬 이름
    2. 진화에 필요한 사탕 / 가지고 있는 사탕
    3. 진화 후 사탕을 2개 돌려준다

접근

2번에 적혀있는 대로 나눠버리면 되지 않을까 싶지만. 진화 후 2개를 돌려준다고 하기에,

그리고 N은 1 <= N <= 70 으로 그리 많지 않다.

그냥 하나하나 시뮬레이션 해도 무방하다.

또한 도감 번호가 가장 작은 포켓몬을 출력하며 되는데, 이는 이미 도감번호 순서로 제공해주기에 문제가 없다.

따라서 어떤 경우보다 큰 경우에만 갱신해주면 된다.

정답 코드

//! ## 포켓몬 고
//!
//! [문제 링크](https://www.acmicpc.net/problem/13717)
//!
//! 출력
//!
//! 총 마리수
//!
//! 많이 진화 가능한 포켓몬의 이름
use std::io::{self, Read};

pub fn main() {
    let mut input = String::new();
    io::stdin()
        .read_to_string(&mut input)
        .expect("인풋이 없습니다.");

    // 진화 시킬 수 있는 총 포켓몬의 수와 많이 진화 가능한 포켓몬의 이름을 알아야 한다.
    let mut total_evol: usize = 0;
    let mut most_poke_name: String = String::new();
    let mut most_poke_cnt: usize = 0;

    let mut lines = input.lines();

    let n: usize = lines.next().unwrap().parse().unwrap();

    for i in 0..n {
        let name = lines.next().unwrap();
        let info: Vec<usize> = lines
            .next()
            .unwrap()
            .split_ascii_whitespace()
            .map(|s| s.parse().unwrap())
            .collect();
        let need_cd = info[0];
        let mut cur_cd = info[1];
        let mut tmp_evol: usize = 0;

        while cur_cd >= need_cd {
            // 총량 증가
            cur_cd = cur_cd - need_cd;
            cur_cd += 2;
            total_evol += 1;
            tmp_evol += 1;
        }

        if tmp_evol > most_poke_cnt {
            most_poke_name = name.to_string();
            most_poke_cnt = tmp_evol;
        }
    }

    println!("{}", total_evol);
    println!("{}", most_poke_name);
}
  1. 어차피 두 줄 출력하는 문제기에, 그냥 println!을 사용했다.
  2. 변수를 여러개 선언하면 해결될 것 같아서 일단 마구 선언해봤다.

마무리하며

면접 이후에 조금 멘탈이 흔들린 감이 있지만

쉬운 문제를 통해서 마음을 다잡는 루틴을 새롭게 만들어보려고 한다.

더 열심히 하면 되는 것입니다 입니다.

포기하지 않으면 되는 것.

화이팅화이팅

-뱅-