[Baekjoon] 10815번: 숫자 카드 - Java
2023. 3. 1. 11:14ㆍComputer Sciences/Problem Solve
https://www.acmicpc.net/problem/10815
문제 설명
상근이가 가지고 있는 카드 더미와 비교 카드 더미를 받아서 상근이가 가지고 있는 카드들을 체크하는 문제이다.
풀이 방법: Set, List - 통과
비교 카드 더미 중 상근이의 카드 더미만 확인하면 되므로 상근이의 카드는 Set으로 저장한다. HashSet의 contains()의 사간 복잡도는 O(1)이므로 매우 빠르다.
Set<Integer> sangeunCards = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
비교 카드 더미를 기준으로 결과를 출력해야 하기 때문에 비교 카드 더미는 순서가 있는 리스트로 저장한다.
List<Integer> cardsForComparing = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
그리고 비교 카드 더미를 순회하며 상근이가 가진 카드에 있는지 체크한 뒤 결과를 출력하면 된다.
cardsForComparing.stream().forEach(card -> {
if (sangeunCards.contains(card))
sb.append(1).append(" ");
else
sb.append(0).append(" ");
});
전체 코드는 다음과 같다.
package baekjoon.set;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
public class BOJ10815 {
public static void main(String[] args) throws IOException {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
br.readLine();
Set<Integer> sangeunCards = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).boxed().collect(Collectors.toSet());
br.readLine();
List<Integer> cardsForComparing = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt).boxed().collect(Collectors.toList());
StringBuilder sb = new StringBuilder();
cardsForComparing.stream().forEach(card -> {
if (sangeunCards.contains(card))
sb.append(1).append(" ");
else
sb.append(0).append(" ");
});
System.out.println(sb);
}
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Baekjoon] 16953번: A -> B - Java (0) | 2023.03.03 |
---|---|
[Baekjoon] 1388번: 바닥 장식 - Java (0) | 2023.03.02 |
[Baekjoon] 2573번: 빙산 - Java (0) | 2023.02.28 |
[Baekjoon] 1629번: 곱셈 - Java (0) | 2023.02.27 |
[Baekjoon] 11478번: 서로 다른 부분 문자열의 개수 - Java (0) | 2023.02.25 |