import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Scanner 보다 빠르다
StringTokenizer st = new StringTokenizer(br.readLine()); // readLine()은 무조건 String 형으로 반환
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
HashMap<String, Integer> nameMap = new HashMap<String, Integer>();
String[] nameArr = new String[n+1];
StringBuilder sb = new StringBuilder();
// 입력
for(int i = 1; i < n + 1; i++){
String name = br.readLine();
nameMap.put(name, i);
nameArr[i] = name;
}
while(m-- > 0) {
String findStrOrNum = br.readLine();
if(isStringNumber(findStrOrNum)) { // 숫자(인덱스)를 입력받은 경우
int index = Integer.parseInt(findStrOrNum);
sb.append(nameArr[index]);
}
else { // 문자를 입력받은 경우
sb.append(nameMap.get(findStrOrNum));
}
sb.append("\n");
}
System.out.println(sb.toString());
}
// 이 문자열이 숫자인지 아닌지 판단하는 함수
public static boolean isStringNumber(String s) {
try {
Double.parseDouble(s);
return true;
}
catch (NumberFormatException e) {
return false;
}
}
}
몇번인지 => 배열 index에서 찾음
이름 => Map.get()이용하여 찾음
아래 더 쉬운 방법!!
찾을 때 숫자인지 이름인지 구별 하는법
=> 빈 공간을 두개 만들 필요가 없음
=> 한 곳에 두가지 경우(name, i), (i, name) 넣으면 한번에 찾기 가능
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Scanner 보다 빠르다
StringTokenizer st = new StringTokenizer(br.readLine()); // readLine()은 무조건 String 형으로 반환
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
HashMap<String, String> nameMap = new HashMap<String, String>();
// 입력
for(int i = 1; i < n + 1; i++){
String name = br.readLine();
nameMap.put(name, Integer.toString(i));
nameMap.put(Integer.toString(i), name);
}
StringBuilder sb = new StringBuilder();
for(int i=0; i < m; i++){
sb.append(nameMap.get(br.readLine()) + "\n");
}
System.out.println(sb);
}
}
'알고리즘' 카테고리의 다른 글
<백준> 1697번 파이썬 알고리즘 (0) | 2021.10.29 |
---|---|
<백준> 1676번 자바 알고리즘 (0) | 2021.10.23 |
<백준> 11404번 자바 알고리즘 (0) | 2021.10.11 |
<백준> 1389번 자바 알고리즘[플로이드 와샬] (0) | 2021.10.09 |
<백준> 1107번 자바 알고리즘 (0) | 2021.07.28 |