Problem
https://leetcode.com/problems/map-sum-pairs/description/
Solution
class MapSum {
class Node {
Character key;
int value;
Map<Character, Node> childrenMap = new HashMap<>();
Node(Character key) {
this.key = key;
}
public Character getKey() {
return this.key;
}
public int getValue() {
return this.value;
}
public void setValue(int value) {
this.value = value;
}
public Map<Character, Node> getChildrenMap() {
return this.childrenMap;
}
}
Node root;
public MapSum() {
root = new Node(null);
}
public void insert(String key, int value) {
char[] keyCharArray = key.toCharArray();
Node current = root;
for (int i=0;i<keyCharArray.length;i++) {
char c = keyCharArray[i];
Map<Character, Node> childrenMap = current.getChildrenMap();
if (childrenMap.containsKey(c)) {
current = childrenMap.get(c);
} else {
Node node = new Node(c);
childrenMap.put(c, node);
current = node;
}
if (i == keyCharArray.length - 1) {
current.setValue(value);
}
}
}
public int sum(String prefix) {
char[] keyCharArray = prefix.toCharArray();
Node current = root;
for (int i=0;i<keyCharArray.length;i++) {
char c = keyCharArray[i];
Map<Character, Node> childrenMap = current.getChildrenMap();
if (childrenMap.containsKey(c)) {
current = childrenMap.get(c);
} else {
return 0;
}
}
return getSum(current);
}
private int getSum(Node node) {
Queue<Node> queue = new LinkedList<>();
queue.add(node);
int result = 0;
while(!queue.isEmpty()) {
Node n = queue.poll();
result += n.getValue();
for(Character key : n.getChildrenMap().keySet()) {
Node child = n.getChildrenMap().get(key);
queue.add(child);
}
}
return result;
}
}
/**
* Your MapSum object will be instantiated and called as such:
* MapSum obj = new MapSum();
* obj.insert(key,val);
* int param_2 = obj.sum(prefix);
*/
- Trie 의 대표적인 문제
- insert, search 의 pseudo code 는 기억해 놓자!

Leave a comment