공부하기/백준

[Java] 백준 풀기 17219 - 비밀번호 찾기

XEV 2023. 9. 21. 22:43

자바 백준 17219번

실버 4

https://www.acmicpc.net/problem/17219

 

17219번: 비밀번호 찾기

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 자료 구조, 해시를 사용한 집합과 맵

 

 

 

 

 

문제 풀기

문제에서 힌트로 주어진 BufferedReader와 BufferedWriter를 사용하여 입력과 출력을 한다.

해시맵을 이용하여 사이트 주소와 비밀번호를 입력받고 get() 메서드를 이용하여 출력해야할 사이트의 비밀번호를 가져온 후 출력한다.

 

 

 

 

 

코드 보기

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
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));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        // N과 M 값을 입력
        String[] nm = br.readLine().split(" ");
        int N = Integer.parseInt(nm[0]); // 저장된 사이트 주소의 수
        int M = Integer.parseInt(nm[1]); // 비밀번호를 찾으려는 사이트 주소의 수
        
        // 저장된 사이트 주소와 비밀번호를 저장하는 Map을 생성
        Map<String, String> passwordMap = readPasswordMap(br, N);
        
        // 비밀번호를 찾고 출력
        findAndPrintPasswords(br, bw, passwordMap, M);
        
        // 출력 버퍼를 비우고 입력/출력 스트림 종료
        bw.flush();
        br.close();
        bw.close();
    }

    // 저장된 사이트 주소와 비밀번호를 입력받아 Map에 저장하는 함수
    private static Map<String, String> readPasswordMap(BufferedReader br, int N) throws IOException {
        Map<String, String> passwordMap = new HashMap<>();
        for (int i = 0; i < N; i++) {
            // 각 줄에서 사이트 주소와 비밀번호를 읽어와 Map에 저장
            String[] siteInfo = br.readLine().split(" ");
            String site = siteInfo[0]; // 사이트 주소
            String password = siteInfo[1]; // 비밀번호
            passwordMap.put(site, password);
        }
        return passwordMap;
    }

    // 비밀번호를 찾고 출력하는 함수
    private static void findAndPrintPasswords(BufferedReader br, BufferedWriter bw, Map<String, String> passwordMap, int M) throws IOException {
        for (int i = 0; i < M; i++) {
            // 비밀번호를 찾으려는 사이트 주소를 읽어옴
            String siteToFind = br.readLine();
            
            // 사이트 주소를 키로 사용하여 비밀번호를 찾음
            String password = passwordMap.get(siteToFind);
            
            // 찾은 비밀번호를 출력 버퍼에 기록
            bw.write(password + "\n");
        }
    }
    
}