투로드
Coder ToLoad
투로드
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 알고리즘
  • CS
  • GITHUB
  • 태그
  • 분류 전체보기 (69)
    • Toy Project (0)
      • EternalSNS (0)
    • Algorithm (46)
      • BaekJoon (38)
      • Programmers (7)
      • Code Tree (1)
    • Computer Science (13)
      • JAVA (7)
      • DataBase (4)
    • Backend (7)
      • Spring (2)
      • JPA (2)
      • Django (3)
    • Mobile (2)
      • Android (2)
    • Unity (1)

인기 글

최근 글

hELLO · Designed By 정상우.
투로드

Coder ToLoad

Algorithm/BaekJoon

[JAVA] 백준 1620 : 나는야 포켓몬 마스터 이다솜

2021. 3. 24. 18:37
문제
 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net

 

해결 방법

기본적인 HashMap 사용 문제이다.

HashMap에 대해 공부할겸 관련된 문제를 풀면서 정리를 해두려고 한다.

HashMap은 Key, Value 로 이루어져 있는데 문제에서는 포켓몬 이름을 순서대로 입력 받은 다음

숫자를 주면 해당되는 순서에 있는 포켓몬 이름을 출력하고, 포켓몬 이름을 주면 몇 번째 순서에 있는지 출력해야한다.

 

그래서 두 가지 경우를 다 대응할 수 있게끔 포켓몬 이름이 Key인 HashMap과 순서가 Key인 HashMap을 생성해서

해결하였다.

 

그리고 숫자로 주어졌을 때와 문자로 주어졌을 때를 판단해서 처리를 해야하는데 그 부분은

www.delftstack.com/ko/howto/java/how-to-check-if-a-string-is-a-number-in-java/ 

이 사이트를 참고하여, double을 이용해서 구분하는 방법을 사용해보았다.

 

그래서 숫자가 주어지면 숫자를 Key로 지정한 poketmonNum 에서 값을 가져오고,

문자가 주어지면 문자를 Key로 지정한 poketmonName 에서 값을 받아와 출력하였다.

 

코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.io.IOException;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		
		HashMap<String, Integer> poketmonName = new HashMap<>();
		HashMap<Integer, String> poketmonNum = new HashMap<>();
		for (int i = 1; i <= N; i++) {
			String name = br.readLine();
			poketmonName.put(name, i);
			poketmonNum.put(i, name);
		}
		
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < M; i++) {
			String input = br.readLine();
			if (isNumber(input)) {
				sb.append(poketmonNum.get(Integer.parseInt(input)) + "\n");
			} else {
				sb.append(poketmonName.get(input) + "\n");
			}
		}
		
		System.out.println(sb);
	}
	
	static boolean isNumber(String s) {
		try {
			Double.parseDouble(s);
			return true;
		} catch (NumberFormatException e) {
			return false;
		}
	}
}

'Algorithm > BaekJoon' 카테고리의 다른 글

[JAVA] 백준 2933 : 미네랄, 18500 : 미네랄2  (0) 2021.03.29
[JAVA] 백준 2776 : 암기왕  (0) 2021.03.25
[JAVA] 백준 14267 : 회사 문화 1  (0) 2021.03.24
[JAVA] 백준 15900 : 나무 탈출  (0) 2021.03.23
[JAVA] 백준 1068 : 트리  (0) 2021.03.22
    'Algorithm/BaekJoon' 카테고리의 다른 글
    • [JAVA] 백준 2933 : 미네랄, 18500 : 미네랄2
    • [JAVA] 백준 2776 : 암기왕
    • [JAVA] 백준 14267 : 회사 문화 1
    • [JAVA] 백준 15900 : 나무 탈출
    투로드
    투로드
    훌륭한 프로그래머가 되어가는 과정을 담아보는 중입니다.

    티스토리툴바