๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 1620 ๋‚˜๋Š”์•ผ ํฌ์ผ“๋ชฌ ๋งˆ์Šคํ„ฐ ์ด๋‹ค์†œ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 8.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/1620

  • ์ฒซ์งธ ์ค„์—๋Š” ๋„๊ฐ์— ์ˆ˜๋ก๋˜์–ด ์žˆ๋Š” ํฌ์ผ“๋ชฌ์˜ ๊ฐœ์ˆ˜ N์ด๋ž‘ ๋งž์ถฐ์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜ M์ด ์ฃผ์–ด์ ธ. N๊ณผ M์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜
  • ํฌ์ผ“๋ชฌ์˜ ์ด๋ฆ„์€ ๋ชจ๋‘ ์˜์–ด๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ์žˆ์Œ (์ฒซ ๊ธ€์ž๋งŒ ๋Œ€๋ฌธ์ž์ด๊ณ , ๋‚˜๋จธ์ง€ ๋ฌธ์ž๋Š” ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋‚˜ ์ผ๋ถ€ ํฌ์ผ“๋ชฌ์€ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋งŒ ๋Œ€๋ฌธ์ž์ผ ์ˆ˜๋„ ์žˆ์Œ)
  • ํฌ์ผ“๋ชฌ ์ด๋ฆ„์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” 20, ์ตœ์†Œ ๊ธธ์ด๋Š” 2
  • ๊ทธ ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ ์ด M๊ฐœ์˜ ์ค„์— ๋งž์ถฐ์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ด
  • ๋ฌธ์ œ๊ฐ€ ์•ŒํŒŒ๋ฒณ์œผ๋กœ๋งŒ ๋“ค์–ด์˜ค๋ฉด ํฌ์ผ“๋ชฌ ๋ฒˆํ˜ธ๋ฅผ ๋งํ•ด์•ผ ํ•˜๊ณ , ์ˆซ์ž๋กœ๋งŒ ๋“ค์–ด์˜ค๋ฉด, ํฌ์ผ“๋ชฌ ๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž๋ฅผ ์ถœ๋ ฅํ•ด์•ผํ•จ
  • ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์ˆซ์ž๋Š” ๋ฐ˜๋“œ์‹œ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ฑฐ๋‚˜ N๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ
  • ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฌธ์ž๋Š” ๋ฐ˜๋“œ์‹œ ๋„๊ฐ์— ์žˆ๋Š” ํฌ์ผ“๋ชฌ์˜ ์ด๋ฆ„๋งŒ ์ฃผ์–ด์ง 

์•„์ด๋””์–ด

  • hashmap์„ ์‚ฌ์šฉํ•˜์—ฌ key๊ฐ’์œผ๋กœ value๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ–ˆ๋‹ค.
  • ํฌ์ผ“๋ชฌ ์ด๋ฆ„์ธ ๋ฌธ์ž์—ด๋กœ ๋ฒˆํ˜ธ๋ฅผ ์ฐพ์„ ์ˆ˜๋„ ์žˆ๊ณ  ํฌ์ผ“๋ชฌ ๋ฒˆํ˜ธ์ธ ์ˆซ์ž๋กœ ์ฐพ์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— hashmap์„ ๋‘๋ฒˆ ์จ์คฌ๋‹ค.(key ๊ฐ’์ด String ์ธ hashmap๊ณผ Integer์ธ hashmap)
  • ์ž…๋ ฅ๊ฐ’์„ ๋ฌด์กฐ๊ฑด String์œผ๋กœ ๋ฐ›๊ธฐ์— (๋‚ด ๋ฐฉ๋ฒ•์€ ๊ทธ๋ ‡๋‹ค..) key ๊ฐ’์ด ๋ฌธ์ž์—ด์ธ์ง€ ์ˆซ์ž์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด ์ œ์ผ ์•ž๋ถ€๋ถ„์„ ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋Œ€๋ฌธ์ž์ธ์ง€ ๊ฐ๋ณ„ํ–ˆ๋‹ค.

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์—๋Š” hashmap์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•ด์„œ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด, ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‹ค..... 

ํ˜น์‹œ java 8๋กœ ํ•˜๋ฉด ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค๊นŒํ•ด์„œ ๋Œ๋ ค๋ณด์•˜๋‹ค.. (๋ถ€๋„๋Ÿฝ๋‹ค)

 

์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค๋ฉด ๊ผผ์ˆ˜ ๋ถ€๋ฆด ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ  ๋‹ค์‹œ ์ œ๋Œ€๋กœ ํ’€์–ด๋ณด์ž....

์ฝ”๋“œ

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

// hashmap ์‚ฌ์šฉ
// ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ• ๋•Œ key์™€ value๊ฐ€ ์ง์„ ์ด๋ฃจ์–ด ์ €์žฅ๋จ
// ํ‚ค ๊ฐ’์œผ๋กœ hash ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์ €์žฅ์œ„์น˜๋ฅผ ๊ฒฐ์ •
// ์ถ”๊ฐ€, ์‚ญ์ œ, ํŠนํžˆ ๊ฒ€์ƒ‰์ด ๋น ๋ฆ„

public class BOJ1620 {
    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 list = Integer.parseInt(st.nextToken());
        // ๋งž์ถฐ์•ผ ๋˜๋Š” ๋ฌธ์ œ ์ˆ˜
        int test = Integer.parseInt(st.nextToken());

        // Hashmap์— key๊ฐ’๊ณผ value ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ
        // ์ด๋ฆ„์œผ๋กœ ์ฐพ๋Š” ๊ฒฝ์šฐ์™€ ๋ฒˆํ˜ธ๋กœ ์ฐพ๋Š” ๊ฒฝ์šฐ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘๋ฒˆ ์ €์žฅ
        HashMap<String, Integer> poket = new HashMap<String, Integer>(list);
        HashMap<Integer, String> poket2 = new HashMap<Integer, String>(list);

        for(int i = 1; i < list + 1; i++){
            // ๋„๊ฐ์— ๋“ฑ๋ก๋  ํฌ์ผ“๋ชฌ ์ด๋ฆ„
            String s = br.readLine();

            // ๋„๊ฐ์— ๋“ฑ๋ก
            poket.put(s, i);
            poket2.put(i, s);
        }

        for(int i = 0; i < test; i++){
            String s = br.readLine();

            // ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฒˆํ˜ธ์ธ์ง€ ์ด๋ฆ„์ธ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ
            // ์ฒซ ๋ฌธ์ž๋ฅผ ๋–ผ์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€ํ™˜
            int ch = (int)s.charAt(0);

            // ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋น„๊ตํ•ด์„œ ๋Œ€๋ฌธ์ž์ผ ๊ฒฝ์šฐ,
            // ๋„๊ฐ์—์„œ key ๊ฐ’์ธ ์ด๋ฆ„์œผ๋กœ value ๊ฐ’์ธ ๋ฒˆํ˜ธ ์ฐพ์•„์„œ ์ €์žฅ
            if((65 <= ch) && (ch <= 90)){
                int n = poket.get(s);
                sb.append(n + "\n");
            }
            // ์ฒซ ๋ฌธ์ž๊ฐ€ ๋Œ€๋ฌธ์ž๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ,
            else{
                // ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•˜์œผ๋ฏ€๋กœ int๋กœ ๋ณ€ํ™˜
                int num = Integer.parseInt(s);
                // ๋„๊ฐ์—์„œ key ๊ฐ’์ธ ๋ฒˆํ˜ธ๋กœ value ๊ฐ’์ธ ํ•ด๋‹น ํฌ์ผ“๋ชฌ ์ด๋ฆ„์„ ์ฐพ์•„ ์ €์žฅ
                String po = poket2.get(num);
                sb.append(po + "\n");
            }
        }

        System.out.println(sb);
    }
}