일단 Iterator를 사용하여 걸러내는 방법을 일차적으로 사용하였으나, 시간초과가 났다. Stream을 사용한 코드도 마찬가지이다.
1차 풀이
..
for (int i = 0; i < m; i++) {
String s = br.readLine();
if (Character.isDigit(s.charAt(0))) { // 숫자
sb.append(hm.get(Integer.parseInt(s)));
} else { // 이름
sb.append(hm.entrySet().stream().filter(e -> e.getValue().equals(s))
.mapToInt(e -> e.getKey()).sum());
}
sb.append("\n");
}
..
다른 분들 풀이를 살펴보니 메모리 구조로 배열을 하나 더 추가하여 시간을 단축하는 방법을 사용하여야 하는 것 같다
나같은 경우에는 문자열 배열 하나를 추가해주고, hashMap을 Integer가 Value에 오게 한 후에 첫 문자가 isDigit이면 HashMap을 조회해서 Value을 추가 해주는 것으로 로직을 변경하였다
HashMap<String, Integer> hm = new HashMap<>();
String[] arr = new String[n + 1];
for (int i = 1; i <= n; i++) {
String s = br.readLine();
hm.put(s, i);
arr[i] = s;
}
근데.. 아직도 스트림을 쓸때 자꾸 자동완성키를 사용하려고 하는데, 연습해야겠따