-
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