문제가 엄청 긴데 사실 안읽고 입력,출력만 읽으면 된다.
간단히 하면, 도감을 쭉 입력받고 들어오는 m개의 문자열에 대한 출력을 행하면 된다. 중요한 점은 m개의 문자열은 숫자와 문자열이라는 점
숫자를 인덱스라고 하면 편하다.
숫자가 들어오면 해당 인덱스의 문자열을, 문자가 들어오면 해당 인덱스를 출력하면 된다.
처음 짠 코드는 map에 string,integer를 넣고 찾아내는 생각을 했는데 시간 초과 떴다. 아마도 key값을 가져올 때 set을 또 만들기 때문에 그런거같다
import java.util.*;
public class Main {
static Map<String, Integer> map = new HashMap<>();
public static void main (String[]args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
for(int i=1; i<=n; i++){
String s = scanner.next();
map.put(s,i);
}
for(int i=0; i<m; i++){ //flag = true = eng, false = number
String s = scanner.next();
boolean flag = true;
for(int j=0; j<s.length(); j++){
if(!(s.charAt(j) >= 48 && s.charAt(j) <= 57)){
break;
}
else {
flag = false;
}
}
if(flag)
System.out.println(map.get(s));
else { //value를 이용한 key값 가져오기
Set<Map.Entry<String,Integer>> entrySet = map.entrySet(); //map을 묶어서 set으로 만듦.
for(Map.Entry<String,Integer> entry:entrySet){
if(entry.getValue().equals(Integer.parseInt(s))) //가져오는 entry의 value중에서 숫자가 있다면 그에대한 key값을 가져옴.
System.out.println(entry.getKey());
}
}
}
}
}
두시간동안 고민한 결과.. 그냥 map에 양방향으로 담은 뒤, value를 출력하면 된다.
import java.util.*;
public class Main {
static Map<String, String> map = new HashMap<>();
public static void main (String[]args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
for(int i=1; i<=n; i++){
String s = scanner.next();
map.put(s,String.valueOf(i));
map.put(String.valueOf(i),s);
}
for(int i=0; i<m; i++){
String s = scanner.next();
System.out.println(map.get(s));
}
}
}