-
Map 개념 및 예제Algorithm/Hash 2022. 1. 5. 16:53728x90
지난 시간 Set에 이어 이번 시간에는 Map에 대해서 다루어 보았다.
Map : 자료를 쌍으로 관리하는데 최적화 된 인터페이스이다.
-> key-value쌍으로 이루어져 있고, key값은 유일하고, value 값은 중복될 수 있다.
Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 와 같은 형식으로 사용한다.
-> put() : set에서 add() 메소드와 유사하며 key, value쌍을 모두 추가해야 하므로 put(~~, ~~) 형식으로 사용한다.
remove() : 제거하는 메소드
get(key) : key와 쌍을 이루고 있는 value값 불러오기
containsKey() : 해당 key값이 객체에 존재하는지 확인
간단하게 Map에 대해서 설명을 했고, 예제를 통해 어떤식으로 사용할 수 있는지를 확인해 보자.
#예제
프로그래머스 해시차트의 두번째 문제인 전화번호 목록 문제이다. 문제는 굉장히 간단하다. phone_book안에 입력 되어 있는 숫자들 중 겹치는 숫자가 있으면 false, 겹치는 숫자가 없으면 true를 반환한다.
처음 문제를 보면서 같은 전화 번호가 중복해서 들어있지 않다는 제한 사항을 보고 저번 시간에 배운 Set을 떠올렸다.
처음 세운 알고리즘
1. Set을 선언해서 phone_book을 add() 메소드로 Set에 담아준다.
2. 개선된 for문을 이용해서 str에 set을 담아주고, str의 길이만큼 반복을 시켜준다.
3. 만약 str문자열이 set에 일부라도 포함되는 것이 있다면 false반환 아니라면 true반환(contains() 사용)
이렇게 알고리즘을 세우고 set을 이용한 문제를 풀어보았다.
이렇게 효율성까지 통과!!! 처음에는 substring을 사용하지 않고, str만으로 contains() 메소드를 사용했는데, 여기서 착각한 부분이 contains() 메소드는 문자열끼리를 비교하는 것이 아닌 객체를 비교하는 것이라는 점이다.
결국 substring(start, end) 메소드를 사용해서 문자열을 하나하나 쪼개어 비교해서 해결할 수 있었다.
이 문제를 그럼 왜 Map에다가 소개를 하는가? Map을 공부했으니 Map을 이용해서도 풀어보았다. 알고리즘은 거의 동일한데, key를 이용해서 문제를 풀 수 있었다.
Map에 put을 이용해서 phone_book 배열 인덱스를 모두 key에 담고, set과 거의 동일한 방식으로 문제를 해결했다. 단지 차이점은 개선된 for문에 set 처럼 담아서는 안되고 key값을 담아주는 점과 containsKey() 메소드를 활용했다는 점.
-> 119 - 0
97694223 - 1
1195524421 - 2
이런식으로 묶어서 인덱스별로 생각할 수 있다는 점을 활용해서 Map을 사용할 수 있었다.
사실 Map은 대표적인 예시가 동명이인이 있는 경우이다. value값으로 구별을 해 줄 수 있기 때문에!!!
728x90'Algorithm > Hash' 카테고리의 다른 글
프로그래머스 고득점 kit(유형정리) - 완주하지 못한 선수 (0) 2023.01.23 프로그래머스 고득점 kit(유형정리) - 폰켓몬 (0) 2023.01.23 HashMap 예제 #2 (0) 2022.01.10 HashSet 예제 #2 (0) 2021.12.29 HashSet 개념 및 예제#1 (0) 2021.12.29