https://www.acmicpc.net/problem/1620
문제
(??)
이번 문제는 컨셉이 좀 재밌었던 것 같다.
내가 이해한 바로는 1번 포켓몬부터 N번에 해당하는 포켓몬이 도감에 등록되는 듯 하다.
그리고 M개의 수 만큼 포켓몬 이름 또는 번호가 주어지며 포켓몬 이름이 들어왔을 때는 번호를, 포켓몬이 저장되어있는 위치의 번호가 주어졌을 때는 포켓몬 이름을 출력하면 된다고 한다.
풀이과정
입력에 포켓몬 이름이 주어지면 도감에 등록되어 있는 해당 포켓몬의 번호를 출력하라고 했다.
어차피 포켓몬은 도감 순서대로 저장되니 반복문의 반복 변수를 1부터 설정하여 저장하면 무리없이 번호를 출력할 수 있을 것이다.
입력으로 포켓몬 이름이 아닌 번호가 들어올 때도 생각해주어야한다. 이때도 어차피 포켓몬은 입력 순서대로 저장되니 반복문의 반복 변수로 인덱스를 매겨주고 해당 인덱스에 포켓몬 이름을 저장한다.
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer( br.readLine(), " " );
int N = Integer.parseInt( st.nextToken() );
int M = Integer.parseInt( st.nextToken() );
// 이름 저장할 HashMap
Map<String,Integer> names = new HashMap<>();
// 도감 번호로 들어올 때 사용할 String[]
String[] numbers = new String[N+1];
for( int i = 1; i <= N; i++ ){
String pocketmon = br.readLine();
// HashMap에 포켓몬 이름 저장
names.put( pocketmon, i );
// 배열에도 저장
numbers[i] = pocketmon;
}
// M만큼 반복
for( int i = 0; i < M; i++ ){
String pocketmon = br.readLine();
// 입력이 숫자라면 배열 인덱스에 접근
if( '9' >= pocketmon.charAt(0) )
sb.append(numbers[Integer.parseInt(pocketmon)]).append("\n");
// 입력이 포켓몬 이름이라면 HashMap에 접근
else
sb.append(names.get(pocketmon)).append("\n");
}
System.out.println(sb);
}