반응형
이번 문제도 틀린 코드로 시작한다ㅎㅎ... VSCode에서는 잘 돌아가는데 백준에 올리니 시간 초과 에러가 발생하였다.
❗️❗️ 틀린 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int[] list = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++){
list[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
int[] list2 = new int[M];
st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<M; i++){
list2[i] = Integer.parseInt(st.nextToken());
}
int[] result = new int[M];
while(true){
for(int i=0; i<M; i++){
for(int j=0; j<N; j++){
if(list2[i] == list[j]){
result[i] += 1;
}
else if(list2[i] != list[j]){
result[i] += 0;
}
}
}
break;
}
for(int i=0; i<M; i++){
sb.append(result[i] + " ");
}
System.out.print(sb);
}
}
알고보니 이진 탐색을 이용해서 풀어야하는 문제라고 한다.
https://charles098.tistory.com/133
[ 알고리즘 ] 이분탐색(Binary Search), upper_bound, lower_bound (C++)
1. 이분탐색 원리 이분탐색은 오름차순 또는 내림차순으로 정렬된 배열에 적용 가능한 탐색 기법이다. 정렬된 배열에서 특정 값을 찾을 때 정중앙에 위치한 값을 활용하면 아주 빠른 속도로 탐
charles098.tistory.com
이 분의 블로그를 참고하여 이진 탐색에 대해 공부하였다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int[] check = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++){
check[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(check);
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<M; i++){
int num = Integer.parseInt(st.nextToken());
sb.append(binarySearch(check, num) + " ");
}
System.out.print(sb);
}
public static int binarySearch(int[] check, int num){
//배열 시작점
int first = 0;
//배열 끝점
int end = check.length-1;
while(first <= end){
int mid = (first+end)/2;
if(check[mid] < num){
first = mid + 1;
}else if(num < check[mid]){
end = mid - 1;
}else{//num값을 찾으면 1 반환
return 1;
}
}
return 0;
}
}
하는 와중에 1 0 0 1 0 0 0 0 결과가 나와서 당황했는데, Arrays.sort(check); 를 안해서 생긴 문제였다...
이분탐색은 정렬된 배열에 적용 가능한 탐색 기법이니 정렬을 꼭 해줘야한다...
단계 제목이 집합과 맵이라고 해서 처음엔 맵으로 푸는 거라고 생각해서 풀었는데 내가 생각한 방식으로는 결과가 제대로 도출되지 않아서 포기했었다. 문제를 푼 후에 찾아보니 HashMap을 이용해서 푸신 분이 계셨다!!!
[Java] HashMap 사용해보기 (BOJ-10815 숫자 카드)
오늘은 백준 10815번: 숫자 카드 문제를 풀어보았습니다.
velog.io
HashMap을 이용해서 푸는 방법을 알고 싶으신 분은 이 분의 글을 참고해보시면 될 것 같다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 7785 - 회사에 있는 사람 (JAVA/ 자바) (0) | 2024.07.17 |
---|---|
[백준] 14425 - 문자열 집합 (JAVA/ 자바) (0) | 2024.07.16 |
[백준] 18870 - 좌표 압축 (JAVA/ 자바) (0) | 2024.06.26 |
[백준] 10814 - 나이순 정렬 (JAVA/ 자바) (0) | 2024.06.18 |
[백준] 1181 - 단어 정렬 (JAVA/ 자바) (1) | 2024.06.13 |