문제
- N개의 정수 A[1], A[2], ... A[N]이 주어질 때, X라는 정수가 존재하는지 여부를 출력하는 문제.
아이디어
- 카운팅 정렬 방식을 활용하려 했지만, 입력 범위가 -2^31 ~ 2^31 이길래 그냥 해시맵을 사용하기로 했다.
- 입력되는 수 마다 해시맵에 저장하고, 맵의 getOrDefault를 활용해 찾는 값이 존재하면 1, 없으면 0을 출력하도록 한다.
- 문제에서는 명확히 밝히지 않았지만, 중복된 정수가 입력될 수도 있기에 맵에 존재 할 경우 그냥 키에 해당하는 값에 +1 해주었다.
풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
Map<Integer, Integer> map = new HashMap<>();
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
// 입력받은 수를 num에 저장하고,
// num을 키값으로 가지는 요소가 있으면 +1, 없으면 맵에 추가
for(int i=0; i<N; i++) {
int num = Integer.parseInt(st.nextToken());
map.put(num, map.getOrDefault(num, 0)+1);
}
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i=0; i<M; i++) {
int num = Integer.parseInt(st.nextToken());
// num을 키값으로 가지는 요소가 있으면(0이 아니면) 1 출력
// 없으면 그대로 0 출력
int state = map.getOrDefault(num, 0);
sb.append(state==0 ? 0 : 1).append('\n');
}
System.out.println(sb);
}
}
채점 결과
기타
- 문제의 출력 부분을 꼼꼼히 읽지 않아 한 번 틀렸다... 문제를 잘 읽자.
- 이분 탐색으로도 분류되어 있던데.... 풀이가 궁금하다.
문제 링크
'백준' 카테고리의 다른 글
[JAVA] 백준 2839번: 설탕 배달 (0) | 2024.07.18 |
---|---|
[JAVA] 백준 2164번: 카드2 (0) | 2024.07.17 |
[JAVA] 백준 1018번: 체스판 다시 칠하기 (1) | 2024.07.17 |
[JAVA] 백준 11866번: 요세푸스 문제 0 (0) | 2024.07.16 |
[JAVA] 백준 11651번: 좌표 정렬하기 2 (2) | 2024.07.16 |