Programming Problem/백준(BOJ)
[문제 풀이][Java] 백준 10815번 숫자 카드 풀이
거북고래
2023. 5. 7. 15:20
반응형
[문제 풀이][Java] 백준 10815번 숫자 카드 풀이
https://www.acmicpc.net/problem/10815
* 학습 목적의 게시물이나 혹시 이 게시물이 문제가 된다면 언제든 연락 부탁드립니다.
* 더 나은 풀이를 위한 훈수, 조언 등 모두 환영합니다!
해결 방법
1. 내가 가진 카드 중에 상근이가 가지고 있는 카드가 있는지 탐색 필요
2. 이진 검색을 하기 위해 내가 가진 카드 배열을 내림차순 정렬
3. 이진 탐색 실시 후 해당 결과 출력
전체 코드
package binarySearch;
import java.util.Arrays;
import java.util.Scanner;
public class B10815 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 입력 받기
int numberOfMyCards = scan.nextInt();
int[] myDeck = new int [numberOfMyCards];
for (int i = 0; i < myDeck.length; i++) {
myDeck[i] = scan.nextInt();
}
Arrays.sort(myDeck); // 검색 대상 배열 내림차순 정렬
int numberOfOppenentCards = scan.nextInt();
int[] oppenentDeck = new int [numberOfOppenentCards];
for (int i = 0; i < oppenentDeck.length; i++) {
oppenentDeck[i] = scan.nextInt();
}
scan.close();
// 결과값 저장 공간
int [] compareResult = new int [numberOfOppenentCards];
// 상대방 카드에 대해 내 카드뭉치 내에 있는지 이진탐색
for(int i = 0; i < oppenentDeck.length; i++) {
compareResult[i] = 0;
int startIdx = 0;
int endIdx = myDeck.length - 1;
while(startIdx <= endIdx) {
int center = (startIdx + endIdx) / 2;
if(myDeck[center] == oppenentDeck[i]) {
compareResult[i] = 1;
break;
} else if(myDeck[center] > oppenentDeck[i]) {
endIdx = center - 1;
} else {
startIdx = center + 1;
}
}
}
for(int i = 0; i < compareResult.length; i++) {
System.out.print(compareResult[i] + " ");
}
}
}
반응형