들어가며
이 문제는 앞에 다 필요없고 입력이란 출력란만 보면 문제를 풀 수 있다.
이름을 주면 번호를, 번호를 주면 해당하는 이름을 출력해야 한다.
어렵게 생각하지 않고 메모리도 2MB로 널널하기 때문에 HashMap을 두 개 사용하는 방식으로 접근했다.
코드
public class 백준1620_포켓몬마스터이다솜 {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] input = reader.readLine().split(" ");
int n = Integer.parseInt(input[0]);
int m = Integer.parseInt(input[1]);
HashMap<String, Integer> nameDictionary = new HashMap<>();
HashMap<Integer, String> numberDictionary = new HashMap<>();
for (int i = 1; i <= n; i++){
String pokemonName = reader.readLine();
nameDictionary.put(pokemonName,i);
numberDictionary.put(i,pokemonName);
}
for (int i = 0; i <m; i++){
String question = reader.readLine();
if (Character.isDigit(question.charAt(0))){
System.out.println(numberDictionary.get(Integer.parseInt(question)));
continue;
}
System.out.println(nameDictionary.get(question));
}
}
}
풀이법
이름을 주면 번호를, 번호를 주면 해당하는 이름을 출력해야하기 때문에, HashMap을 두 개 만든다.
그렇게 사전 데이터 초기화를 해주고 다음으로 중요한 건 " 어떻게 String이 숫자인지 인식할 것인가??" 이다.
자바엔 Character.isDigit이라는 함수가 있다.
char 데이터가 숫자인지 확인해주는 함수인데, 이를 조금 이용해서 String의 첫 번째 문자가 숫자인지 아닌지를 파악한다.
이 문제에선 포켓몬 이름엔 영어밖에 없기 때문에 이 방식으로 숫자인지 아닌지 파악이 가능하다.
따라서 숫자라면 영어 이름을 꺼내도록하고 이름이면 숫자를 꺼낼 수 있게 된다.
그렇다면 String 전체가 숫자인지 파악하는 방법이 뭐가 있을까??
여기에서 정규 표현식을 외워두면 좋다.
boolean isNumeric = str.matches("-?\\d+");
-? : 음수 허용
//d+ : 하나이상의 숫자
이를 통해 숫자인지 파악도 가능하다.
'Algorithm > 백준' 카테고리의 다른 글
[백준]2606 - 바이러스 문제 풀이(Java,자바) (0) | 2025.01.13 |
---|---|
[백준]1463 - 1로 만들기 문제 풀이(Java,자바) (2) | 2025.01.07 |
[백준]1764 - 듣보잡 문제 풀이(Java,자바) (0) | 2025.01.07 |
[백준]1654 - 랜선 자르기 문제 풀이(Java,자바) (1) | 2025.01.03 |
[백준]2839 - 설탕 배달 문제 풀이(Java,자바) (0) | 2025.01.02 |