이번 문제는 또한 시간내에 해결하는 것이 중요하다.
입력 값의 범위를 고여하면 약 10,000,000 * 500,000이 되므로
일일히 값을 비교하는 방법은 사용할 수 없다.
그렇다면 다른 방법을 생각해보아야한다.
이 부분은 다른 사람의 포스트를 참고하여 만들었다.
HashMap를 사용하여 만들어 보자.
HashMap는 키를 통해 조회할 때 가지고 있다면 value를 가지고 있지 않다면 null을 반환한다.
import java.util.StringTokenizer;
import java.util.HashMap;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashMap<String, Integer> map = new HashMap<>();
StringTokenizer st;
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
map.put(st.nextToken(), 0);
}// 해시맵에 가지고 있는 카드를 넣는다.
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; i++) {
//정수 M까지의 숫자를 순서대로 대입한다.
if (map.get(st.nextToken()) != null) {
//HashMap를 쓴 이유.
//HashMap은 값이 있으면 Key에 대한 Value를 반환하고, 없으면 null을 반환한다.
//즉 값이 null이 아닌 값이니 M까지 숫자 중 카드 N에 있는 수만 반환한다.
sb.append("1 ");
// StringBuilder에 1을 더함.
} else {
sb.append("0 ");
//아니면 0을 더함
}
}
System.out.print(sb);
br.close();
}
}'java' 카테고리의 다른 글
| 백준 7785 자바 회사에 있는 사람 java (0) | 2024.01.23 |
|---|---|
| 백준 14425 문자열 집합 java 자바 (1) | 2024.01.23 |
| 백준 18870 좌표압축 자바 java (0) | 2024.01.22 |
| 백준 10814 나이순 정렬 (0) | 2024.01.22 |
| 백준 1181 단어 정렬 (1) | 2024.01.22 |