[Baekjoon] 10815번: 숫자 카드 - Java

2023. 3. 1. 11:14Computer Sciences/Problem Solve

https://www.acmicpc.net/problem/10815

 

10815번: 숫자 카드

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net

문제 설명

상근이가 가지고 있는 카드 더미와 비교 카드 더미를 받아서 상근이가 가지고 있는 카드들을 체크하는 문제이다.

풀이 방법: 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);
        }
    }
}