λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜

[Java] BOJ 1764 λ“£λ³΄μž‘

by 🍊귀🍊 2024. 7. 23.

문제 

문제 링크 https://www.acmicpc.net/problem/1764

  • κΉ€μ§„μ˜μ΄ 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단과, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단이 μ£Όμ–΄μ§ˆ λ•Œ, 듣도 보도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.
  • 첫째 쀄에 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ 수 N, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 수 M이 주어진닀.
  • μ΄μ–΄μ„œ λ‘˜μ§Έ 쀄뢀터 N개의 쀄에 걸쳐 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ 이름과, N+2μ§Έ 쀄뢀터 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 이름이 μˆœμ„œλŒ€λ‘œ 주어진닀. 이름은 띄어쓰기 없이 μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œλ§Œ 이루어지며, κ·Έ κΈΈμ΄λŠ” 20 μ΄ν•˜μ΄λ‹€. N, M은 500,000 μ΄ν•˜μ˜ μžμ—°μˆ˜μ΄λ‹€.
  • 듣도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…λ‹¨μ—λŠ” μ€‘λ³΅λ˜λŠ” 이름이 μ—†μœΌλ©°, 보도 λͺ»ν•œ μ‚¬λžŒμ˜ λͺ…단도 λ§ˆμ°¬κ°€μ§€μ΄λ‹€.
  • λ“£λ³΄μž‘μ˜ μˆ˜μ™€ κ·Έ λͺ…단을 μ‚¬μ „μˆœμœΌλ‘œ 좜λ ₯ν•œλ‹€.

아이디어

  • 듣도 λͺ»ν•œ μ‚¬λžŒμ΄λ¦„μ„ hashmap에 μ €μž₯ν•˜κ³  보도 λͺ»ν•œ μ‚¬λžŒλ“€μ„ μž…λ ₯λ°›μœΌλ©΄μ„œ ν•΄λ‹Ή λ¬Έμžμ—΄μ΄ hashmap에 keyκ°’μœΌλ‘œ μ €μž₯λ˜μ–΄ 있으면 κ²°κ³Όλ₯Ό 좜λ ₯ν•  배열에 μ €μž₯ν•˜κ³  μ—†μœΌλ©΄ μ €μž₯ν•˜μ§€ μ•Šμ•˜λ‹€. 

κ²ͺ은 μ‹œν–‰μ°©μ˜€

  • μ²˜μŒμ— μ‹œκ°„μ΄ˆκ³Όκ°€ 자꾸 λ‚˜μ„œ 뭐가 λ¬Έμ œμΈκ°€... 고민을 ν•˜λ©° λ°˜λ³΅λ¬Έμ„ 톡해 같은 λ¬Έμžμ—΄μ΄ μžˆλŠ”μ§€ μ°Ύλ˜κ²ƒμ„ ArrayList둜 λ³€ν™˜ν•΄μ„œ contains둜 바꿔보기도 ν•˜κ³  ν–ˆμ§€λ§Œ κ³„μ†ν•΄μ„œ μ‹œκ°„μ΄ˆκ³Όκ°€ 났닀..
  • κ³ λ―Όν•˜λ˜ 도쀑 hashmap의 key값을 ν™œμš©ν•˜λ©΄ 검색이 λΉ λ₯΄λ‹€λŠ” 것이 생각이 났고 hashmap을 ν™œμš©ν•œ κ²°κ³Ό, ν•΄κ²°ν•  수 μžˆμ—ˆλ‹€...γ…œγ…œ (더 쒋은 방법이 μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ„Έμš” γ…œγ…œ)

μ‹œκ°„μ΄ˆκ³Ό... 무섭닀...
'λ§žλŠ”κ±° 같은데 μ™œ μ‹œκ°„μ΄ˆκ³Όμ•Ό!' ν•˜λŠ” λ‚˜μ˜ λͺ¨μŠ΅....γ…Ž...

μ½”λ“œ

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

public class BOJ1764 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

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

        // 듣도 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 수
        int N = Integer.parseInt(st.nextToken());

        // 보도 λͺ»ν•œ μ‚¬λžŒμ˜ 수
        int M = Integer.parseInt(st.nextToken());

        // 듣도 보도 λͺ»ν•œ μ‚¬λžŒμ„ μ €μž₯ν•  hashmap
        HashMap<String, String> no_l = new HashMap<>();

        // 듣도 보도 λͺ»ν•œ μ‚¬λžŒμ„ μ €μž₯ν•  λ°°μ—΄
        List<String> result = new ArrayList<>();

        // 듣도 보도 λͺ»ν•œ μ‚¬λžŒλ“€μ„ μž…λ ₯λ°›μ•„ 배열에 μ €μž₯
        for(int i = 0; i < N; i++){
            String s = br.readLine();

            no_l.put(s, "1");
        }

        // 보도 λͺ»ν•œ μ‚¬λžŒλ“€μ„ μž…λ ₯받은 λ’€,
        // 듣도 보도 λͺ»ν•œ μ‚¬λžŒμ„ μ €μž₯ν•œ 배열에 있으면 κ²°κ³Ό 배열에 μ €μž₯
        for(int i = 0; i < M; i++){
            String s = br.readLine();

            if(no_l.containsKey(s)){
                result.add(s);
            }
        }

        // μ •λ ¬ν•˜κΈ°
        Collections.sort(result);

        sb.append(result.size() + "\n");

        for(int i = 0; i < result.size(); i++){
            sb.append(result.get(i) + "\n");
        }

        System.out.println(sb);
    }
}



'μ•Œκ³ λ¦¬μ¦˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] BOJ 11399 ATM  (2) 2024.07.23
[Java] BOJ 11047 동전 0  (2) 2024.07.23
[Java] BOJ 1874 μŠ€νƒ μˆ˜μ—΄  (14) 2024.07.23
[Java] BOJ 1654 λžœμ„  자λ₯΄κΈ°  (10) 2024.07.22
[Java] BOJ 2108 톡계학  (2) 2024.07.22