본문 바로가기

알고리즘 풀이/백준

[백준] 17219번: 비밀번호 찾기 - JAVA

🔗 문제 링크

BOJ 17219번: 비밀번호 찾기

 

17219번: 비밀번호 찾기

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

www.acmicpc.net

 

📝 풀이 과정

사이트 주소를 통해 비밀번호를 얻으면 되는 문제이다. N과 M의 범위가 10만이기 때문에 단순 반복문으로는 시간초과가 발생할 수 있다.


사이트가 중복되지 않고, Map의 경우 getset의 연산 모두 $O(1)$이기 때문에 Map을 사용하기로 했다.

Map<String, String>을 통해 주소값을 key로 두고 비밀번호를 value로 저장하였고, 출력시 get(key)를 활용해 비밀번호를 출력해주었다.

 

 

💡 문제에서 N과 M의 범위가 100,000인데 이를 Scanner로 입력을 받고 System.out.println으로 줄마다 출력을 해준다면 시간초과가 발생할 수 있으므로 입력은 BufferedReader, 출력의 경우 StringBuilderBufferedWriter를 활용해보자.

 

💻 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] input = br.readLine().split(" ");
        int N = Integer.parseInt(input[0]);
        int M = Integer.parseInt(input[1]);

        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < N; i++) {
            input = br.readLine().split(" ");
            map.put(input[0], input[1]);
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < M; i++)
            sb.append(map.get(br.readLine())).append('\n');

        System.out.println(sb.toString());

    }
}

 

📊 제출 결과