All :L
[BOJ/Java] 비밀번호 찾기 (17219) 본문
반응형
1. 문제 분석
문제 개요
- 이 문제는 특정 사이트의 비밀번호를 저장해두고, 나중에 그 사이트에 해당하는 비밀번호를 빠르게 조회할 수 있는 프로그램을 작성하는 것이다.
- 주어진 사이트와 비밀번호 쌍을 저장하고, 이후 요청된 사이트의 비밀번호를 출력하는 문제다.
입력 형식
- 첫 줄에 저장할 사이트의 수 N과 조회할 사이트의 수 M이 주어진다.
- 이후 N개의 줄에 사이트 주소와 비밀번호가 주어진다.
- 그 다음 M개의 줄에는 조회할 사이트 주소가 주어진다.
출력 형식
- 요청된 사이트 주소에 해당하는 비밀번호를 순서대로 출력한다.
2. 알고리즘 종류
이 문제는 해시맵(HashMap) 자료구조를 사용하여, 사이트 주소를 키(key)로, 비밀번호를 값(value)으로 저장해 빠르게 조회할 수 있도록 한다.
3. 주요 부분 및 코드 작성 방법
1. HashMap 사용
- HashMap<String, String>을 사용하여 사이트 주소와 비밀번호를 저장하고, 나중에 입력받은 사이트 주소를 키로 비밀번호를 조회한다.
2. 입출력 최적화
- BufferedReader와 BufferedWriter를 사용해 입력과 출력을 효율적으로 처리한다.
4. 코드 설명
메인 함수 (main)
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.StringTokenizer;
public class baekjoon_0717_17219 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String nm = bf.readLine(); // 첫 줄에서 N과 M을 읽음
StringTokenizer st = new StringTokenizer(nm);
int N = Integer.parseInt(st.nextToken()); // 저장할 사이트의 수
int M = Integer.parseInt(st.nextToken()); // 조회할 사이트의 수
// 사이트 주소와 비밀번호를 저장할 해시맵 생성
HashMap<String, String> info = new HashMap<String, String>();
String[] a;
// N개의 사이트 주소와 비밀번호를 입력받아 해시맵에 저장
for(int i = 0; i < N; i++) {
String text = bf.readLine();
a = text.split(" ");
info.put(a[0], a[1]);
}
// M개의 조회할 사이트 주소를 입력받아 해당 비밀번호를 출력
for(int i = 0; i < M; i++) {
String site = bf.readLine();
bw.write(info.get(site)); // 해시맵에서 비밀번호 조회
bw.newLine(); // 개행
}
bw.flush(); // 출력 버퍼를 비움
bw.close(); // BufferedWriter 종료
}
}
- 입력 처리: BufferedReader와 StringTokenizer를 사용해 효율적으로 입력을 처리한다.
- HashMap 사용: 사이트 주소와 비밀번호를 해시맵에 저장해, O(1) 시간 복잡도로 비밀번호를 조회할 수 있다.
- 출력 처리: BufferedWriter를 사용해 출력할 내용을 모아 한 번에 출력하여 성능을 최적화한다.
5. 요약
- 이 코드는 HashMap을 이용해 사이트 주소와 비밀번호를 저장하고, 이후 해당 사이트 주소로 비밀번호를 빠르게 조회하는 프로그램이다.
- 입출력 효율성을 고려해 BufferedReader와 BufferedWriter를 사용했다.
반응형
'CODING > BOJ' 카테고리의 다른 글
[BOJ/Java] 알파벳 (1987) (0) | 2024.08.26 |
---|---|
[BOJ/Java] 적록색약 (10026) (0) | 2024.08.25 |
[BOJ/Java] 도키도키 간식드리미 (12789) (0) | 2024.08.25 |
[BOJ/Java] 단지번호붙이기 (2667) (0) | 2024.08.24 |
8장 SQL 응용 (DML - SELECT (1/2)) (0) | 2023.04.15 |
Comments