◾문제
비밀번호 찾기
레벨: 실버4
유형: 해시
https://www.acmicpc.net/problem/17219
◾풀이
해시에 대한 개념을 알고 있다면 어렵지 않게 풀 수 있는 문제이다.
문제이해
문제가 길지만 문제 길이에 비하여 풀이는 간단한 문제이다. 사이트와 비밀번호를 쌍으로 저장하고, 주어지는 사이트들에 대한 비밀번호를 출력하면 된다.
HashMap 사용하기
문제에서 사이트 - 비밀번호라는 정보를 '쌍'으로 저장해두고, 사이트가 주어질 때 해당하는 비밀번호를 찾아 출력해주면 된다. 이는 Map을 활용하면 제격이다. Map인터페이스를 구현한 구현체인 hashMap을 활용하여 이 문제를 쉽게 풀 수 있다.
Map선언하기
hshMap은 키(key)와 값(value)을 쌍으로 저장하는 자료구조이다. 사이트주소, 비밀번호를 쌍으로 저장해야 하고 또 하나의 쌍에서 하나의 정보로 다른 정보를 꺼내야하므로 이 hashMap자료구조를 이용한다. 이 문제에서는 사이트 주소, 비밀번호 모두 문자열 형태이므로 모두 String 타입으로 선언해준다.
💡Map<key의 타입, value의 타입>
Map<String,String> map = new HashMap<>();
문자열 저장하기
'사이트 주소 비밀번호' 형태의 문자열로 들어오는 정보를 StringTokenizer를 이용하여 map에 put
메서드를 이용하여 저장한다. 참고로 StringTokenzier를 사용 시 공백의 경우 new StringTokenizer(br.readLine()," ")
와 같이 구분자를 따로 선언하지 않아도 아래처럼 생략할 수 있다.
StringTokenizer st = new StringTokenizer(br.readLine());
map.put(st.nextToken(), st.nextToken());
값 꺼내기
map에서 get메서드에 key값을 넣으면 value값을 얻을 수 있다. 우리는 사이트주소(key)를 통해 비밀번호(value)를 얻고 싶으므로 map.get(사이트주소)
와 같이 선언하여 비밀번호를 출력한다.
bw.write(map.get(br.readLine())+"\n");
◾정답코드
import java.io.*;
import java.util.*;
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));
String[] arr = br.readLine().split(" ");
int listNum = Integer.parseInt(arr[0]);
int findNum = Integer.parseInt(arr[1]);
Map<String, String> map = new HashMap<>();
while (listNum-- > 0) {
StringTokenizer st = new StringTokenizer(br.readLine());
map.put(st.nextToken(), st.nextToken());
}
while (findNum-- > 0) {
bw.write(map.get(br.readLine())+"\n");
}
bw.flush();
bw.close();
}
}
'Algorithm > baekjoon' 카테고리의 다른 글
[algorithm] 백준 1822 차집합 (0) | 2024.02.11 |
---|---|
[algorithm] BFS/DFS 백준1012 유기농배추 (0) | 2023.12.14 |
[algorithm] 정렬 백준 11651 좌표 정렬하기2 (0) | 2023.12.12 |