22.5.04 [HackerRank]Java Map

서태욱·2022년 5월 5일
0

Algorithm

목록 보기
27/45
post-thumbnail

✅ 문제 분석

첫 번째 줄에는 전화번호부의 항목수를 나타내는 정수 n이 입력된다.
각 항목은 이름과 전화번호 두줄로 구성된다.

사람 이름은 소문자로만 구성된다. 전화번호는 0으로 시작하지 않는 8자리 숫자다.

전화번호부에 항목이 없으면 "Not Found"출력. 있으면 이름과 전화번호 출력

🌱 배경지식

맵(Map)

자바 맵은 대응관계를 쉽게 표현할 수 있게 해주는 자료형이다.
Associative array, Hash라고도 불린다. Key-Value값을 쌍으로 갖는다.

맵의 가장 큰 특징은 바로 이 쌍인데, 순차적으로 element값을 구하는 리스트나 배열과 달리
key 값으로 value를 얻는다는 것이다.

인터페이스 Map을 구현한 자료형은 HashMap, LinkedHashMap, TreeMap등이 있다.
그 중에서 HashMap이 가장 간단한 구조다.(해시 함수를 사용해 데이터를 해시 테이블에 저장, 검색하는
해싱 기법을 사용해 많은 양의 데이터 중에서 빠르게 원하는 데이터를 가져올 수 있다고 한다.)

1.put

public class HashMap_Test{
	
    public static void main(String[] args) {
    	HashMap<Integer, String> map = new HashMap<>();
        
        map.put(1, "사과");
        map.put(2, "오렌지");
        map.put(3, "메론");
        
        System.out.println(map);
    }
}

//결과
{1=사과, 2=오렌지, 3=메론}

put(key, value)형태로 값을 입력해준다. value값은 중복이 가능하지만, key값은 중복이 안된다.
만약 중복되면 나중에 선언된 key값의 value가 출력된다.

  1. get
    System.out.println(map.get("people"));  // "사람" 출력
    이 메소드를 사용하면 value값을 얻을 수 있다. people이라는 key 값에 대응하는 value값인 "사람"이 출력된다.
  2. containsKey
import java.util.HashMap;
import java.util.Map;

public class CheckExistHashMap {
	public static void main(String[] args) {

	 // HashMap 준비
	 Map<Integer, String> map = new HashMap<Integer, String>();
	 map.put(1, "Apple");
	 map.put(2, "Banana");
	 map.put(3, "Orange");
	 map.put(null, "Tomato");

	 // 특정 key값 존재여부 체크 (containsKey())
	 System.out.println(map.containsKey(1)); // true
	 System.out.println(map.containsKey(5)); // false
	 System.out.println(map.containsKey(null)); // true
	}
}

이 메소드는 맵에 해당 key가 존재하는지 여부를 확인해준다. 존재하면 true가 리턴된다.

4.remove

System.out.println(map.remove("people"));  // "사람" 출력

remove 메소드는 key값에 해당하는 아이템(people:사람)을 삭제하고, 그 value값을 리턴한다.

  1. size
System.out.println(map.size());  // 1 출력

people, baseball 두 값을 가지고 있었는데, remove로 people이 삭제되었으므로 1이 출력될 것이다.

✏️ 해설

import java.util.*;
import java.io.*;

public class JavaMap {
    public static void main(String []argh) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt(); // 입력받는 정수 n은 phoneBook의 항목 수다.
        in.nextLine();
        HashMap<String, Integer> phoneBook = new HashMap<>(); //이름(String), 전화번호(Integer)항목을 phoneBook이라는 이름으로 해쉬맵을 생성한다.

        for(int i=0;i<n;i++){
            String name=in.nextLine(); //key값에는 이름이 들어간다.
            int phone=in.nextInt(); //value는 전화번호다.
            in.nextLine();
            phoneBook.put(name, phone); //생성한 해쉬맵에 key는 이름, value는 전화번호를 담는다.
        }
        while(in.hasNext()){ //boolean 타입으로 반환되는 hasNext()를 사용해 맵에 저장되었는지를 확인한다. 
            String name=in.nextLine(); // 사람 이름으로 검색했을때
            if( !phoneBook.containsKey(name)){ //phoneBook에 해당 key값인 name이 없으면 
                System.out.println("Not Found"); //Not Found 출력
                continue; //while문에서 continue는 조건식으로 이동해 계속한다.
            }
            System.out.println(name + "=" + phoneBook.get(name)); //만약 boolean타입 true가 반환되면 이름 = (해당 key값 name로 찾은 value인) 번호를 출력해 준다.
        }
    }
}

👉 참고

profile
re:START

0개의 댓글