[Java]伯俊1620号[ポケモンマスター李多順です]java


白峻1620号です.
https://www.acmicpc.net/problem/1620

質問する


...省略
呉博士:そんなに順調ですね.本当のポケモンマスターになるために、図鑑を完成させましょう.まず、あなたが持っているポケモン図鑑で、ポケモンの名前を見るとポケモンの番号が出たり、ポケモンの番号を見るとポケモンの名前が出たりする練習をします.もし私が試験に合格したら、新しく作った図鑑をあげます.

入力


1行目は図鑑のポケモンの数Nと私が答える質問の数MですNとMは1以上、100000未満の自然数ですが、自然数とは何か知っていますか?知らなければ聞いても大丈夫です.私はいつでも質問に答える準備ができています.
2行目からN行目、ポケモン番号1のポケモンからN番に相当するポケモンまで、行ごとに1つずつポケモンを入力します.ポケモンの名前は英語で書かれています.そして、うん...最初の字だけが大文字で、残りの文字は小文字だけです.そうだ.一部のポケモンは最後の文字だけが大文字かもしれません.ポケモンの名前の最大長さは20最小長さは2次の行から私が答える質問を入力します.問題がアルファベット形式で発生した場合はポケモン番号、数字形式で発生した場合はポケモン番号に対応する文字を出力する必要があります.入力した数字は1以上、N以下でなければならない.入力した文字は図鑑のポケモンの名前だけを与えなければならない.

しゅつりょく


1行目から順にM行で質問ごとの答えを言えばいい!!数字を入力して、該当する数字のポケモンの名前を入力して、文字を入力して、ポケモンの名前に対応する数字を出力すればいいです.

入力例

26 5
Bulbasaur
Ivysaur
Venusaur
Charmander
Charmeleon
Charizard
Squirtle
Wartortle
Blastoise
Caterpie
Metapod
Butterfree
Weedle
Kakuna
Beedrill
Pidgey
Pidgeotto
Pidgeot
Rattata
Raticate
Spearow
Fearow
Ekans
Arbok
Pikachu
Raichu
25
Raichu
3
Pidgey
Kakuna

サンプル出力

Pikachu
26
Venusaur
16
14

考える


私たちが最初に想定したコードはIranterのEntrySetによって出力される.
			Iterator<Entry<String, Integer>> it = map.entrySet().iterator();
			
			while(it.hasNext()) {
				Entry<String, Integer> entrySet = (Entry<String, Integer>)it.next();   
正解はもちろんいいですが、問題は時間を超えています.
時間が過ぎるとどう考えても他の人のコードを参考にして解けません
参考にする。
参考にする。

アクション


この問題では、動作を参考に説明する部分が少なく、勉強と理解を中心に書きたいと思います.
コミット結果から、時間は少し減りましたが、最後は少し大きくなりましたが、メモリは減り続けています.
私が普段使っているコードとは違ってstoiを初めて使ったのです
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = stoi(st.nextToken()); // 포켓몬의 개수
		int M = stoi(st.nextToken()); // 문제의 개수
いつもIntegerpaseInt()を使用して文字列を変更し、もう一人はstoiを使用してメソッドで実行します.
もちろんstoiメソッドは独自に作成されていますが、時間やメモリが増加し、逆に時間とメモリが減少すると考えられています.
2つ目はスキーコードです.
この問題でポケモンの番号はnumだと思いますTOString()を使用して文字列に変更し、もう一人はazyコード0から9の番号48から57を使用します.
もちろんここでは57以下しか言われていませんこれは48以下が特殊文字であるため、異常を表示する必要がないためである.
Askyコードを参照
Askyコードを使用した後、メモリと時間が減少していることがわかりました.
将来、似たような問題のタイプがある場合は、頻繁に使用され、効率的なコードを書くように努力する必要があります.

TMI


本当にたくさんの賢い人が尊敬しています

コード#コード#

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = stoi(st.nextToken()); // 포켓몬의 개수
		int M = stoi(st.nextToken()); // 문제의 개수

		String arr[] = new String[N + 1];
		HashMap<String, Integer> map = new HashMap<>();

		for(int i=1; i<=N; i++) {
			String pokemon = br.readLine();
			arr[i] = pokemon;
			map.put(pokemon, i);
		}

		while(M --> 0) {
			String Q = br.readLine();

			if(Q.charAt(0) <= 57) {
				int key = Integer.parseInt(Q);
				sb.append(arr[key]+"\n");
			}
			else {
				sb.append(map.get(Q)+"\n");
			}

		}

		System.out.println(sb);

	} // End of main

	private static int stoi(String nextToken) {
		return Integer.parseInt(nextToken);
	}
} // End of class