23-09-07 TIL

more·2023년 9월 7일

문제

시도

  • 처음에는 N 만큼의 크기를 가진 배열 2개를 만들어서 하나에는 String 값을, 하나에는 Boolean 값을 저장한 다음에 입력 값이랑 동등하다면 Boolean 배열을 true로 만들고 해당 배열에서 false 값을 가진 인덱스 수만 count 해서 나타내려고 했다.
  • 하지만 생각해보니 굳이 배열을 2개만드는 것 보다 Map을 사용해서 키 & 밸류로 나타내는 것이 좋을 것이라고 보았다.
  • 굳이 Boolean을 true, false 나타낼 필요가 없을 것으로 생각

해결

  • 따라서 Map을 사용해서 containsKey을 사용하여서 String 을 key로 두어 나타내어 해결하였다.

problem solved

  • 백준 22233 (가희와 키워드) - Java
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		// 키워드 수
        int N = Integer.parseInt(st.nextToken());
        // 메모 수
        int M = Integer.parseInt(st.nextToken());
		// 키워드 저장할 해시맵
        Map<String, Boolean> map = new HashMap<>();

        for (int i = 0; i < N; i++) {
        	// 키워드를 읽어서 맵에 저장
            map.put(br.readLine(), false);
        }
		// 키워드 수 만큼의 카운트
        int count = N;
        for (int i = 0; i < M; i++) {
            st = new StringTokenizer(br.readLine(), ",");
            // 해당 줄에 쉼표 단위로 문자를 나누고
            // 문자가 계속 존재한다면
            while (st.hasMoreTokens()) {
                String tmp = st.nextToken();
                // 해당 문자를 키로 가진 값이 맵에 존재한다면
                if (map.containsKey(tmp)) {
                	// 삭제
                    map.remove(tmp);
                    count--;
                }
            }
            bw.write(count + "\n");
        }


        bw.flush();
        bw.close();
        br.close();
    }

}

0개의 댓글