이 문제는 딱 보니 이분탐색이나 HashMap구조를 사용하면 될 것 같았다.
필자는 HashMap을 사용하는게 좀 더 편할 것 같아서 HashMap으로 풀었다.(HashMap안에 메서드 이용하기 위함)
필수로 알아야 할 HashMap의 메서드는
- (HashMap객체명).put
HashMap에 값 넣기 - (HashMap객체명).containkey
HashMap의 키 값중에 내가 넣어준 것과 일치하는 키가 있는가 ? -> ture/false 반환
을 이용해서 풀었다.
이게 생각나는대로 막 짜서 풀었던 결과이지만 마음에 들지않아 한 번 리팩터링을 하였다
import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;
public class b10815 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
HashMap<Integer, Integer> hmap = new HashMap<>();
int[] arrN = new int[n];
StringTokenizer stN = new StringTokenizer(br.readLine());
int m = Integer.parseInt(br.readLine());
int[] arrM = new int[m];
StringTokenizer stM = new StringTokenizer(br.readLine());
for(int i = 0; i<n; i++){
arrN[i]=Integer.parseInt(stN.nextToken());
hmap.put(arrN[i],1);
}
for(int i = 0; i<m; i++){
arrM[i]=Integer.parseInt(stM.nextToken());
if(hmap.containsKey(arrM[i])){
System.out.print(1+" ");
} else {
System.out.print(0+" ");
}
}
}
}
리팩터링 후
import java.io.*;
import java.util.HashMap;
import java.util.StringTokenizer;
public class b10815 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
HashMap<String, Integer> hmap = new HashMap<>();
String[] arrN = new String[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i<n; i++){
arrN[i]=st.nextToken();
hmap.put(arrN[i],1);
}
int m = Integer.parseInt(br.readLine());
String[] arrM = new String[m];
st = new StringTokenizer(br.readLine());
for(int i = 0; i<m; i++){
arrM[i]=st.nextToken();
if(hmap.containsKey(arrM[i])){
System.out.print(1+" ");
} else {
System.out.print(0+" ");
}
}
}
}
사실 크게 달라진 것은 없고 리소스 낭비될 것 같은 코드(합칠 수 있는 코드) 들을 정리해주었다.
1번과 2번 속도차이는 약 300ms 밖에 차이나지 않는다.
이분 탐색으로 하면 시간이 훨씬 빨라질 것 같아 나중에 도전해봐야겠다.
'백준 문제풀이' 카테고리의 다른 글
[백준] 4673번 (0) | 2024.04.12 |
---|---|
[백준] 1021번 (0) | 2024.04.09 |
[백준] 2775번 (0) | 2024.03.31 |
[백준] 1152번 (0) | 2024.03.30 |
[백준] 1037번 풀이 (0) | 2024.03.17 |