백준 1620 나는야 포켓몬 마스터 이다솜(구현)

문제가 엄청 긴데 사실 안읽고 입력,출력만 읽으면 된다.
간단히 하면, 도감을 쭉 입력받고 들어오는 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));
         }
    }
}

좋은 웹페이지 즐겨찾기