알고리즘

<백준> 1620번 자바 알고리즘

changha. 2021. 10. 12. 22:56
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;


class Main {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Scanner 보다 빠르다 
		StringTokenizer st = new StringTokenizer(br.readLine()); // readLine()은 무조건 String 형으로 반환 
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		HashMap<String, Integer> nameMap = new HashMap<String, Integer>();
		String[] nameArr = new String[n+1];
		StringBuilder sb = new StringBuilder();
		
		// 입력
		for(int i = 1; i < n + 1; i++){
      		String name = br.readLine();
      		nameMap.put(name, i);
      		nameArr[i] = name;
    }
		
		while(m-- > 0) {
			String findStrOrNum = br.readLine();
			if(isStringNumber(findStrOrNum)) { // 숫자(인덱스)를 입력받은 경우
				int index = Integer.parseInt(findStrOrNum);
				sb.append(nameArr[index]);
			}
			else {	// 문자를 입력받은 경우
				sb.append(nameMap.get(findStrOrNum));
			}
			sb.append("\n");
		}
		
		System.out.println(sb.toString());
	}
	
	// 이 문자열이 숫자인지 아닌지 판단하는 함수
	public static boolean isStringNumber(String s) {
	   try {
	       Double.parseDouble(s);
	       return true;
	   }
	   catch (NumberFormatException e) {
	       return false;
	   }
	}
 
}

몇번인지 => 배열 index에서 찾음

이름 =>  Map.get()이용하여 찾음 

 

아래 더 쉬운 방법!!


찾을 때 숫자인지 이름인지 구별 하는법
=> 빈 공간을 두개 만들 필요가 없음 
=> 한 곳에 두가지 경우(name, i), (i, name) 넣으면 한번에 찾기 가능 

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


class Main {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // Scanner 보다 빠르다 
		StringTokenizer st = new StringTokenizer(br.readLine()); // readLine()은 무조건 String 형으로 반환 
		
		int n = Integer.parseInt(st.nextToken());
		int m = Integer.parseInt(st.nextToken());
		
		HashMap<String, String> nameMap = new HashMap<String, String>();

		// 입력
		for(int i = 1; i < n + 1; i++){
      String name = br.readLine();
      nameMap.put(name, Integer.toString(i));
      nameMap.put(Integer.toString(i), name);
    }

    StringBuilder sb = new StringBuilder();
    for(int i=0; i < m; i++){
      sb.append(nameMap.get(br.readLine()) + "\n");
      
    }
    System.out.println(sb);
		
  }
 
}