https://www.hackerrank.com/challenges/contacts/problem
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를 꺼내어 탐색하였다.
'Programming > Data Structure' 카테고리의 다른 글
[Hackerrank] BinarySearchTreeInsertion (0) | 2020.12.06 |
---|---|
[Hackerrank] TreePreorderTraversal (0) | 2020.12.02 |
[Hackerrank] TreePostorderTraversal (0) | 2020.12.02 |
[Hackerrank] TreeInorderTraversal (0) | 2020.12.02 |
[Hackerrank] TreeHeightofaBinaryTree (0) | 2020.12.02 |