본문 바로가기
Programming/Data Structure

[Hackerrank] contacts - Map, List (HashMap, ArrayList)

by 읽고 쓰는 개발자 2020. 12. 6.

https://www.hackerrank.com/challenges/contacts/problem

 

Contacts | HackerRank

Create a Contacts application with the two basic operations: add and find.

www.hackerrank.com

package exam.complete;
//https://www.hackerrank.com/challenges/contacts/problem


import java.util.*;

public class Contacts {
    public static void main(String[] args) {
        System.out.println(Arrays.toString(contacts(new String[][]{{"add", "hack" },
                {"add", "h" },
                {"add", "sfdsf" },
                {"find", "hac" },
                {"find", "s" }})));
    }
    static int[] contacts(String[][] queries) {
        List<Integer> answerList = new ArrayList<>();
        Map<Character, List<String>> map = new HashMap<>();

        for (int i = 0; i < queries.length; i++) {
            if(queries[i][0].equals("add")){
                if (map.containsKey(queries[i][1].charAt(0))) map.get(queries[i][1].charAt(0)).add(queries[i][1]);
                else {
                    List<String> list = new ArrayList<>();
                    list.add(queries[i][1]);
                    map.put(queries[i][1].charAt(0), list);
                }
            } else {
                List<String> valueList = map.get(queries[i][1].charAt(0));
                if(valueList == null) answerList.add(0);
                else {
                    int cnt = 0;
                    for (String str : valueList)
                        if (queries[i][1].length() <= str.length() && queries[i][1].equals(str.substring(0, queries[i][1].length()))) cnt++;
                    answerList.add(cnt);
                }
            }
        }

        int[] returnArray = new int[answerList.size()];
        for (int i = 0; i < answerList.size() ; i++) returnArray[i] = answerList.get(i);
        return returnArray;
    }
}

ㅇㅓㅏ히ㅓㅇㅇ

 

Map 자료구조를 이용하여 해결한 문제.

 

요구사항

  • add : 새로운 String을 insert 
  • find : 주어진 String을 0번째 인덱스부터 substring으로 가지고 있는 요소들의 갯수를 return

map의 key는 요소의 첫번째 character로 잡고, value로 요소 String 모음 list로 잡았다.

add 요청 시 map에 put ( 첫 알파벳이 키로 존재하면 해당 리스트에 add하고, 없다면 새 리스트를 생성 후 add 하였다. )

find 요청 시 map에서 주어진 String의 첫 알파벳을 key로 갖는 list를 꺼내어 탐색하였다.