문제
동빈이네 전자 매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자.
예를 들어, 가게의 부품이 총 5개일 때 부품 번호가 다음과 같다고 하자.
N = 5
[8, 3, 7, 9, 2]
손님은 총 3개의 부품이 있는지 확인 요청했는데, 부품 번호는 다음과 같다.
M = 3
[5, 7, 9]
이 때, 부품이 있으면 yes, 없으면 no를 출력한다.
입력 조건
첫번째 줄에 가게의 부품 총 개수 N이 입력된다.
두번째 줄에 가게에 있는 부품의 부품번호가 입력된다.
세번째 줄에 손님이 원하는 부품의 총 개수 M이 입력된다.
네번째 줄에 손님이 원하는 부품의 부품번호가 입력된다.
출력 조건
부품이 있다면 yes, 없다면 no를 출력하시오.
풀이
가게에 있는 부품의 부품번호를 배열로 받고, 배열에 손님이 원하는 부품번호가 있는지 확인한다.
import java.util.*;
class Main {
public static void main(String[] args) {
int n, m;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
int[] inStore = new int[n];
for (int i = 0; i < n; i++) {
inStore[i] = sc.nextInt();
}
m = sc.nextInt();
int[] wanna = new int[m];
for (int i = 0; i < m; i++) {
wanna[i] = sc.nextInt();
}
sc.close();
for (int w : wanna) {
if (Arrays.stream(inStore).anyMatch(i -> i == w))
System.out.print("yes ");
else
System.out.print("no ");
}
} // end main
}
배열에 포함되어있는지 확인할 때
보통 문자열 내에 특정 문자, 문자열이 포함되어있는지 확인하는 경우 .contains()를 통해 확인할 수 있다.
정수형 배열과 같이 배열 내에 존재하는지 파악할 때는 (python이라면 in을 썼겠지만) 4가지 방법을 사용한다.
1. anyMatch() 메서드를 사용하는 방법
int key = 30;
int[] arr = {10, 20, 30, 40, 50};
Arrays.stream(arr).anyMatch(i -> i == key);
인자값으로 람다식을 받는다. 포함한다면 true, 포함하지 않는다면 false를 리턴한다.
2. contains() 메서드를 사용하는 방법
int key = 30;
int[] arr = {10, 20, 30, 40, 50};
Arrays.asList(arr).contains(key);
먼저, 배열을 Arrays.asList()를 통해 리스트로 변환한 다음, 리스트에 포함하는지 확인한다.
3. binarySearch() 메서드를 사용하는 방법
int key = 30;
int[] arr = {10, 20, 30, 40, 50};
Arrays.sort(arr);
Arrays.binarySearch(arr, key);
먼저, 배열을 정렬하고 사용한다. binarySearch 결과 값이 존재한다면 0 이상을 리턴한다. 이진검색 알고리즘을 사용해 배열에 특정 값이 있는지 확인한다.
'Algorithm' 카테고리의 다른 글
[Algorithm] 1로 만들기 (0) | 2021.05.18 |
---|---|
[Algorithm] 떡볶이 떡 만들기 (0) | 2021.05.17 |
[Algorithm] 두 배열의 원소 교체 (0) | 2021.05.15 |
[Algorithm] 성적이 낮은 순서대로 출력하기 (0) | 2021.05.14 |
[Algorithm] 위에서 아래로 (0) | 2021.05.13 |