반응형

[문제 풀이][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] + " ");
		}
		
	}

}

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기