https://www.acmicpc.net/problem/1620
1620번: 나는야 포켓몬 마스터 이다솜
첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면
www.acmicpc.net
풀이방법
book[] 배열로만 사용했을 때, 시간초과가 나서 HashMap을 사용 했다.
=> 출력 할 때, 숫자가 주어지면 배열에서 바로 뺄 수 있는데, 문자열이 주어지면 앞부터 계속 비교하면서 탐색하기 때문
1. book배열에 주어진 포켓몬 이름을 넣는다.
2. 해시맵에 문자열을 키 값으로, 인덱스 변호를 value값으로 가질 수 있도록 넣는다.
3. 숫자가 주어지면 book[] 배열에서 인덱스번호로 빼고, 문자열이 주어지면 해시맵에서 문자열을 키값으로 찾는다.
숫자가 주어졌는지, 문자가 주어졌는지 확인하는 방법!(아스키코드 사용)
if((str.charAt(0)-'0') <10)
도감은 모두 영어로만 이루어져 있다.
따라서 주어지는 문자열의 시작이 a~z , A~Z로 이루어져있고 숫자일때는 1~9로 이루어져 있다.
소문자의 아스키코드는 a(97)~ 이고, 대문자의 아스키코드는 A(65)~ 이고, 숫자 0의 아스키코드는 48 이다.
주어지는 문자열의 1번째 원소를 받아와서 0의 아스키코드값(48)을 빼준 값이 10보다 작으면 숫자를 입력받았다는 점을 활용 했다.
ex. 대문자 A가 첫 번 째 원소일경우
=> A의 아스키코드값이 65이므로 (65 - 48) = 17 , 17은 10 보다 큰 값이기 때문에 문자열이 입력 됐음을 알 수 있다.
ex. 숫자 1이 첫 번째 원소일 경우
=> 1의 아스키코드값이 49이므로 (49 - 48) = 1 , 1은 10 보다 작은 값이기 때문에 숫자가 입력 됐음을 알 수 있다.
소스코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
static int N,M;
static String[] book;
static HashMap<String,Integer> map;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
book = new String[N];
map = new HashMap<String,Integer>();
for (int i = 0; i < N; i++) {
String name = br.readLine();
book[i] = name;
map.put(name, i+1);
}
for (int i = 0; i < M; i++) {
String str = br.readLine();
if((str.charAt(0)-'0') <10) { //앞자리가 10 미만일경우(숫자 입력받음)
sb.append(book[Integer.parseInt(str)-1]).append("\n");
}else {
sb.append(map.get(str)).append("\n");
}
}
System.out.println(sb.toString());
}
}
결과
'Algorithm > java' 카테고리의 다른 글
순열(permutation) 구현 (1) | 2023.04.12 |
---|---|
백준 11053 JAVA : 가장 긴 증가하는 부분 수열(LIS) (0) | 2023.03.31 |
백준 3190 JAVA : 뱀 (0) | 2023.03.16 |
백준 14503 JAVA : 로봇 청소기 (1) | 2023.02.01 |
백준 14719 JAVA : 빗물 (0) | 2023.01.30 |