ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1620번 - 나는야 포켓몬 마스터 이다솜
    알고리즘/백준 2023. 6. 10. 14:42
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.StringTokenizer;
    
    public class Main {
    	
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		int N = Integer.parseInt(st.nextToken());
    		int M = Integer.parseInt(st.nextToken());
    		String name;
    		HashMap<Integer, String> names = new HashMap<>();
    		HashMap<String, Integer> numbers = new HashMap<>();
    		for(int i=1;i<=N;i++) {
    			name = br.readLine();
    			names.put(i, name);
    			numbers.put(name, i);
    		}
    		StringBuilder sb = new StringBuilder();
    		String input;
    		for(int i=0;i<M;i++) {
    			input = br.readLine();
    			if(input.charAt(0) >= "0".charAt(0) && input.charAt(0) <= "9".charAt(0)) {
    				sb.append(names.get(Integer.parseInt(input))+"\n");
    			} else {
    				sb.append(numbers.get(input)+"\n");
    			}
    		}
    		System.out.print(sb);
    		br.close();
    	}
    }

    크게 두 가지 핵심이 있는 문제입니다.

    1. Map(HashMap)의 사용

    2. 숫자로 이루어진 문자열과 나머지 문자열을 구분

     

    Map의 사용의 경우 번호로 이름을 조회할 수도 있고 이름으로 번호를 조회할 수도 있기 때문에 두 개의 Map이 필요합니다. 위에서는 for문에서의 i를 번호로 이용하여 int형 키를 String에 매핑하는 맵과 String 키를 int에 매핑하는 맵 두 개를 만들어 각 입력마다 두 맵 모두를 채웠습니다.

     

    나머지는 M번의 조회가 시작될 때 숫자와 그렇지 않은 문자열을 구분하는 것인데 알파벳과 숫자가 섞이는 경우가 없기 때문에 첫글자가 숫자인 지의 여부를 확인하여 간단하게 검사할 수 있습니다.

     

    0과 9의 유니코드를 알고있다면 더 빠르게 판단할 수 있고 그렇지 않더라도 "0".charAt(0)과 같이 표현함으로써 해당 범위를 if문으로 구성할 수 있습니다.

     

    모든 조회 결과를 StringBuilder에 더하고 for문이 끝난 이후 출력하면 문제가 해결됩니다.

    '알고리즘 > 백준' 카테고리의 다른 글

    1927번 - 최소 힙  (0) 2023.06.15
    1764번 - 듣보잡  (0) 2023.06.10
    1389번 - 케빈 베이컨의 6단계 법칙  (0) 2023.06.09
    1107번 - 리모콘  (0) 2023.06.08
    1012번 - 유기농 배추  (0) 2023.06.06
Designed by Tistory.