주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
문제에 내용이 길어서 중요 핵심 부분만 보여드리겠습니다.
내용 전체를 보실거면 위에 링크에 들어가셔서 확인해주시면 감사하겠습니다.
![](https://blog.kakaocdn.net/dn/bskzdx/btrBNccrAC1/Tg76moQEqQsWx90Y9QVk30/img.png)
![](https://blog.kakaocdn.net/dn/bgCepk/btrBKpjLJ8V/OHl7jSWkUaDxjLqkMAktK1/img.png)
![](https://blog.kakaocdn.net/dn/92Vg4/btrBJM7lCzc/NuJgk8Kjpvgw7SbXuELZLk/img.png)
접근 방법
이 문제에 핵심은
1. N개의 포켓몬 이름들을 받아서 도감에 저장되어있습니다.
2. M개의 포켓몬 관련 번호나 이름을 받으면 해당 번호나 도감 이름을 결과로 출력합니다.
저는 N개의 포켓몬들의 이름과 도감 번호를 기준으로 2개의 HashMap<>을 만들었습니다.
M개의 포켓몬 관련 정보를 받았을 때
도감 번호일 때도감 번호 기준인 HashMap<>에서 값을 찾습니다.
포켓몬 이름일 때포켓몬 이름 기준인 HashMap<>에서 값을 찾습니다.
M개의 입력된 값이 도감번호인지 이름인지 확인할 때해당 입력값 첫 번째 글자를 통해서 A-Z이면 이름, 아니면 도감 번호로 추정하였습니다.
문제를 해결한 알고리즘의 과정입니다.
1. N개의 포켓몬 이름, 도감 번호 기준인 HashMap<> 2개를 만들었습니다.
2. M번 포켓몬 관련 정보를 받아서 HashMap<>에 존재하는지 확인합니다.
3. 도감 번호이면 포켓몬 이름, 포켓몬 이름이면 도감 번호를 결과로 출력합니다.
- BufferedReader를 사용하여 입력 값을 받았습니다.
- StringTokenizer를 이용하여 N,M을나누었습니다.
- M개의 포켓몬이나 도감번호를 HashMap.containsKey()를 이용하여 존재하는 지 확인하였습니다.
- 포켓몬 이름이면 도감 번호, 도감번호이면 포켓몬 이름을 BufferedWriter 저장하였습니다.
- BufferedWriter에 저장된 결과값을 출력하였습니다.
import java.util.*;
import java.io.*;
public class Main{
static int N,M;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//입력값 처리하는 BufferedReader
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//결과값 출력하는 BufferedWriter
StringTokenizer st = new StringTokenizer(br.readLine()," ");
N =Integer.parseInt(st.nextToken());
M =Integer.parseInt(st.nextToken());
HashMap<String,Integer> nameKeyMap = new HashMap<>(); //포켓몬 이름 기준
HashMap<Integer,String> numKeyMap = new HashMap<>(); //도감 번호 기준
for(int i=1;i<=N;i++) { //HashMap 초기화
String pokemonName = br.readLine();
nameKeyMap.put(pokemonName, i);
numKeyMap.put(i, pokemonName);
}
for(int i=0;i<M;i++) {
String findPokemon = br.readLine();
char AsciiNum = findPokemon.charAt(0);
if(AsciiNum >= 65 && AsciiNum <= 90) { //A-Z 시작으로 포켓몬 이름일 때
if(nameKeyMap.containsKey(findPokemon))
bw.write(nameKeyMap.get(findPokemon) + "\n");
}else { //도감 번호일 때
int num = Integer.parseInt(findPokemon);
bw.write(numKeyMap.get(num) + "\n");
}
}
bw.flush(); //결과 출력
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
[백준] 단계별로 풀어보기(단계:12, 집합과 맵,JAVA)11478번, 서로 다른 부분 문자열의 개수 (0) | 2022.05.14 |
---|---|
[백준] code.plus(시뮬레이션과 구현,JAVA)14890번, 경사로 (0) | 2022.05.14 |
[백준] 단계별로 풀어보기(단계:12, 집합과 맵,JAVA)14425번, 문자열 집합 (0) | 2022.05.10 |
[백준] 단계별로 풀어보기(단계:27, 동적 계획법과 최단거리 역추적,JAVA)11780번, 플로이드 2 (0) | 2022.05.09 |
[백준] code.plus(시뮬레이션과 구현,JAVA)14499번, 주사위 돌리기 (0) | 2022.05.09 |
댓글