반응형
[문제 풀이][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] + " ");
}
}
}
반응형
'Programming Problem > 백준(BOJ)' 카테고리의 다른 글
[문제 풀이][Java] 백준 1002번 터렛(두 원의 위치관계) (1) | 2023.06.10 |
---|---|
[문제 풀이][Java] 백준 16953번 A→B (2) | 2023.06.08 |
[문제 풀이][Java] 백준 1026번 보물 (1) | 2023.06.07 |
[문제 풀이][Java] 백준 10610번 30 (4) | 2023.05.28 |
[문제풀이][Java] 백준 1789번 수들의 합 풀이(서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?) (0) | 2023.05.07 |
최근댓글