A, E, I, O, U 5개의 모음을 사용하여 만들 수 있는 길이 5 이하의 모든 단어가 수록된 단어집이 있다. 단어는 사전순으로 배열되어 있으며, 첫번째 단어는 "A"이고, 두번재 단어는 "AA"이고 마지막 단어는 "UUUUU"이다.
word를 input으로 받을 때, 이 단어가 단어집에서 몇번째째 단어인지 return 하는 문제이다.
대략적으로 계산해보았을 때 총 단어의 개수는 6^5 = 7776 개를 넘을 수 없다. 단어의 위치를 알 수 있는 규칙을 찾는 것도 방법이겠지만, 단어의 수가 많지 않으니 brute force 방법을 이용해 풀어도 된다.
orderMap이라는 map변수를 만들어서 (단어, 순번) 조합으로 map에다 저장을 하고, solution에는 map에서 순번을 찾아서 return하도록 만들었다.
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
class Solution {
static List<String> vowels = List.of("A", "E", "I", "O", "U");
static Integer orderNum = 0;
static Map<String, Integer> orderMap = new HashMap<>();
static {
initOrderMap(orderMap, new LinkedList<>());
}
public static void initOrderMap(Map<String, Integer> orderMap, List<String> vowelList) {
String joinWord = String.join("", vowelList);
if (joinWord.length() != 0) {
orderMap.put(joinWord, orderNum);
}
if (vowelList.size() <= 4) {
for (int i = 0; i < vowels.size(); i++) {
orderNum = orderNum + 1;
vowelList.add(vowels.get(i));
initOrderMap(orderMap, vowelList);
vowelList.remove(vowelList.size() - 1);
}
}
}
public int solution(String word) {
return orderMap.get(word);
}
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 2021 위클리 챌린지 10주차 - 교점에 별 만들기 (0) | 2021.10.14 |
---|---|
[Java] 2021 위클리 챌린지 9주차 - 전력망을 둘로 나누기 (0) | 2021.10.07 |
[Java] 위클리 챌린지 8주차 - 최소직사각형 (0) | 2021.09.27 |
[Java] 2021 위클리 챌린지 7주차 - 입실 퇴실 (0) | 2021.09.14 |
[Java] 2021 위클리 챌린지 6주차 - 복서 정렬하기 (0) | 2021.09.06 |