importjava.util.Map;importjava.util.HashMap;classSolution {publicintsolution(String word) {Map<String,Integer> map =newHashMap<>();String[] arr = {"A","E","I","O","U"};int index =1;for (int i =0; i <5; i++) {map.put(arr[i], index++);for (int j =0; j <5; j++) {map.put(arr[i] + arr[j], index++);for (int k =0; k <5; k++) {map.put(arr[i] + arr[j] + arr[k], index++);for (int o =0; o <5; o++) {map.put(arr[i] + arr[j] + arr[k] + arr[o], index++);for (int p =0; p <5; p++) {map.put(arr[i] + arr[j] + arr[k] + arr[o] + arr[p], index++); } } } } }returnmap.get(word); }}
Time: 57.07 ms
Space: 80.2 MB
배열 크기가 5 밖에 안되기 때문에 for 문을 다섯번 중첩해서 정말 단순하게 풀었다. 그리고 재귀로 개선해봤다.
개선하기
importjava.util.Map;importjava.util.HashMap;classSolution {privateMap<String,Integer> map =newHashMap<>();privateint index =0;publicintsolution(String word) {String[] vowels = {"A","E","I","O","U"};for (int i =0; i <5; i++) {insert(vowels,"", i); }returnmap.get(word); }// vowel, depth : "", 0 -> "A", 0 -> ...publicvoidinsert(String[] vowels,String vowel,int depth) {if (vowel.length() ==5) return;String word = vowel + vowels[depth]; // "" + "A" -> "A" + "A" -> ... index++; // 1 -> 2map.put(word, index); // "A", 1 -> "AA", 2 -> ...for (int i =0; i <5; i++) {insert(vowels, word, i); // word, i : "A", 0 -> ... } }}
Time: 14.45 ms
Space: 81 MB
재귀이긴한데 뭔가 부족한 재귀 풀이다. insert() 메서드만 보면 첫번째 문자열을 스스로 전달하고 있지 않아서 만약 문자열 "A" 만 전달하게 되면 "AAAAU" 에서 재귀는 끝나버린다.
이를 해결하기 위해 반복문을 통해 insert() 메서드를 호출하고 있는 상태다. insert() 메서드를 한번만 호출해서 해결하기 위해 한번 더 개선해봤다.