문제풀이/백준(Boj) 문제풀이

[백준] - 10815. 숫자 카드

얄루몬 2023. 11. 30. 20:37

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

 

10815번: 숫자 카드

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

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.StringTokenizer;

public class Main {

	private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	private static StringBuilder sb = new StringBuilder();
	private static StringTokenizer st;

	private static List<Integer> getResult() throws IOException {

		st = new StringTokenizer(br.readLine());

		int n = Integer.parseInt(st.nextToken());
		List<Integer> nList = getList();

		st = new StringTokenizer(br.readLine());
		int m = Integer.parseInt(st.nextToken());
		List<Integer> mList = getList();

		Map<Integer, Boolean> checkedList = new HashMap<>();

		for (Integer no : nList) {
			checkedList.put(no, true);
		}

		return extractResult(mList, checkedList);

	}

	private static List<Integer> extractResult(List<Integer> nList, Map<Integer, Boolean> checkedList) {

		List<Integer> result = new ArrayList<>();

		for (int no : nList) {

			if (!Objects.isNull(checkedList.get(no)) && Objects.requireNonNull(checkedList.get(no))) {
				result.add(1);

			} else {

				result.add(0);

			}
		}
		return result;
	}

	private static List<Integer> getList() throws IOException {
		List<Integer> list = new ArrayList<Integer>();

		st = new StringTokenizer(br.readLine(), " ");
		while (st.hasMoreTokens()) {
			int addNum = Integer.parseInt(st.nextToken());

			list.add(addNum);
		}

		return list;
	}

	public static void main(String[] args) throws IOException {

		List<Integer> result = getResult();
		for (Integer integer : result) {

			sb.append(integer).append(" ");

		}

		System.out.println(sb.toString().trim());

	}

}
  • 상근이가 입력 받은 카드 수를 기준으로 checked list를 만들어 해당 카드 번호에 index에 boolean  값을 넣어준다.
  • 매칭되는지 확인 여부를 m개 만큼 출력해야 하기 때문에 checklist를 m개의 숫자를 돌아가면서 확인한다.
  • 이때 checkList의 index에 있는 값이 true면 상근이가 가지고 있는 값으로 매칭되기 때문에 1을 돌려주고 그게 아니라면 0을 돌려준다.
  • 마지막 출력을 위해 stringBuilder를 사용하여 작업하고 마지막에 추가된 공백을 제거해 출력 양식을 맞춰준다.