○ 문제 요약
입력 값에 따른 결과 값을 출력해주자.
○ 문제 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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 ;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
HashMap<String, Integer> map = new HashMap<>();
String[] arr = new String[ N + 1];
for(int i = 1 ; i <= N; i++){
String tmp = br.readLine();
map.put(tmp,i);
arr[i] = tmp;
}
StringBuilder sb = new StringBuilder();
while(M --> 0){
String input = br.readLine();
if(TypeCheck(input)){ // 숫자라면 ?
int i = Integer.parseInt(input);
sb.append(arr[i]);
}else{ // 문자라면?
sb.append(map.get(input));
}
sb.append("\n");
}
System.out.println(sb);
}
public static boolean TypeCheck(String input){
try{
Double.parseDouble(input);
return true;
}catch(NumberFormatException e){
return false;
}
}
}
알고리즘 분류가 집합과 맵이었기 때문에 맵을 사용하게 쉽게 풀 수 있다는 것을 알고 문제를 접했다.
HahshMap을 만들고 Map에 저장하는 것은 어렵지 않았는데, 문제는 입력 값에 따라 출력 값이 다르다는 것이었다.
포켓몬의 이름이 입력으로 들어오면 포켓몬의 번호가 출력되고, 반대로 번호가 입력되면 포켓몬의 이름이 출력되어야 한다.
그래서 입력 값의 타입에 따라 구분하면 되겠다는 결론은 나왔지만 그것을 구현하기에는 아직 실력이 부족했다. 그래서 다른 블로거님의 방법을 보고 배웠다.
map에는 포켓몬 이름을 키 값으로 넣어주고 문자열 배열을 하나 생성해서 인덱스를 1부터 시작해서 M까지 포켓몬 이름을 넣어줬다.
그림으로 보면 아래처럼 값이 들어있다.
값을 저장했으니 이제 입력 값의 타입을 구분해주면 된다. 그 과정을 위해 TypeCheck()라는 사용자 정의 메서드를 만들어줬다.
이 메서드를 보면 입력 값을 Double 타입으로 변환을 할 때, 숫자 형식이면 Double 타입으로 변환되면서 true를 반환하지만 숫자 형식이 아닌 것을 변환하려고 하면 예외가 터지면서 false를 반환한다.
이렇게 입력 값의 타입을 구분할 수 있게 되었다.
TypeCheck() 메서드의 값이 true가 반환되면 숫자이므로 입력 값을 Integer 타입으로 변환해주고 arr 배열에서 i 번째에 들어있는 값을 StringBuilder의 객체 sb에 넣어준다.
TypeCheck() 메서드의 값이 false가 반환되면 문자이므로 map에 저장되어 있는 value 값을 key 값으로 꺼내와서 마찬가지로 sb에 넣어준다.
while문을 탈출하고 sb를 출력하면 된다.
○ 결과
'문제풀이 > 백준' 카테고리의 다른 글
백준 5397. 키로거(JAVA) (0) | 2022.05.24 |
---|---|
백준 1697. 숨바꼭질 (JAVA) (0) | 2022.05.19 |
백준 10816. 숫자 카드2 (JAVA) (0) | 2022.05.17 |
백준 1920. 수 찾기(JAVA) (0) | 2022.05.16 |
백준 7576. 토마토 (JAVA) (0) | 2022.05.03 |