© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 17219 - 비밀번호 찾기

2023-01-23
BOJ
실버 IV
java
원본 문제 보기
자료 구조
집합과 맵
해시를 사용한 집합과 맵

문제

BOJ 17219 - 비밀번호 찾기

사이트 주소와 비밀번호가 N개 저장되어 있을 때, M개의 사이트에 대한 비밀번호를 찾아 출력하라.

입력

첫째 줄에 N (1 ≤ N ≤ 100,000), M (1 ≤ M ≤ 100,000), 이후 N줄에 사이트 주소와 비밀번호, M줄에 조회할 사이트 주소가 주어진다.

출력

M개의 사이트에 대한 비밀번호를 한 줄에 하나씩 출력한다.

예제

입력출력
16 4 noj.am IloveBOJ ... (생략) noj.am ## ...IloveBOJ ...

풀이

HashMap에 사이트-비밀번호 쌍을 저장하고, 조회 시 O(1)로 검색한다.

  1. N개의 사이트-비밀번호 쌍을 HashMap에 저장한다
  2. M개의 조회 요청에 대해 HashMap.get()으로 비밀번호를 찾는다
  3. StringBuilder로 출력을 모아 한 번에 출력한다

핵심 아이디어: HashMap의 O(1) 조회를 활용하면 N+M번의 연산으로 모든 쿼리를 처리할 수 있다.

코드

package day399;
 
import java.io.*;
import java.util.*;
 
public class Day350BOJ17219비밀번호찾기 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String site = st.nextToken();
            String passwd = st.nextToken();
            map.put(site, passwd);
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < m; i++) {
            String site = br.readLine();
            sb.append(map.get(site) + "\n");
        }
        System.out.print(sb);
    }
}

복잡도

  • 시간: O(N + M)
  • 공간: O(N)