[백준] 10815번-숫자 카드-Java

screenshot

[백준] 10815번-숫자 카드


❓문제

문제는 매우 간단한 편이다.
두가지의 배열을 받아서 1번째 배열이 기준이 되어, 1번째 배열의 요소가 2번째 배열의 요소에 있는 경우 1 아니면 0을 출력하면 된다.

🖊️풀이법

Map을 사용한다면, 굳이 배열의 요소들을 하나하나씩 모두 검사(2중 for문같은)하는 불필요한 로직을 줄일 수 있다.
Map은 한쌍의 키와 밸류 값으로 이루어져 있다.

  1. key -> 주어진 element , value -> 1Map 타입의 map 객체를 하나 생성한다.
  2. 두번째 요소들을 기존에 생성된 map 객체의 map.get()메서드로 호출 한 후 value값을 StringBuilder에 담는다.

여기서 만약 없는 키값을 입력할 경우, nullValue값이 반환되니 null로 반환될 시 0StringBuilder에 담도록 예외처리를 해주면 된다.

정답 코드

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        Map<Integer,Integer> map = new HashMap<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 0; i < N; i++){ 
            map.put(Integer.parseInt(st.nextToken()),1); //요소들을 map에 키(요소)와 밸류(1)를 저장
        }
        int M = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < M; i++){
            int tmp = Integer.parseInt(st.nextToken());
            if(map.get(tmp) == null){ //만약 대조되는 키가 없어 null이 반환될 경우 0을 sb에 추가
                sb.append(0).append(" ");
            } else {
                sb.append(map.get(tmp)).append(" "); //일치하는 요소가 있는 경우 value값인 1을 sb에 추가
            }
        }
        System.out.println(sb); //출력
    }
}

끝으로

이번 문제는 간단하게 Map을 다루는 법을 체크하는 문제 같았다.
단계가 높아짐에 따라서 점점 사용되는 컬렉션요소들이 늘어나니 항상 잘 기억하고 학습하자.