풀이 1. 각 자리수마다 넘어가는 숫자의 규칙
public int solution(String word) {
int answer = 0;
char[] charWord = word.toCharArray();
int[] intArr = {781, 156, 31, 6, 1};
for(int i=0; i<charWord.length; i++) {
int num = -1;
switch(charWord[i]) {
case 'A' : num = 0;
break;
case 'E' : num = 1;
break;
case 'I' : num = 2;
break;
case 'O' : num = 3;
break;
case 'U' : num = 4;
break;
}//switch case end
//intArr[i]*num은 자기자신 직전까지의 번호
//따라서 +1 해줘야한다.
answer += intArr[i] * num + 1;
}//for end
return answer;
}//solution() end
풀이 2. dfs 풀이
List<String> list = new ArrayList<>();
//dfs 풀이1
public int solutionDFS(String word) {
dfs("", 0);
return list.indexOf(word);
}//solutionDFS() end
public void dfs(String str, int length) {
if(length>5) return;
list.add(str);
for(int i=0; i<5; i++) {
dfs(str+"AEIOU".charAt(i), length+1);
}//for end
}//dfs() end
시간이 조금 걸리길래 String 작업을 StringBuilder로 해봤다.
풀이 3. dfs 풀이 + StringBuilder
List<String> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
public int solutionDFS2(String word) {
dfs2();
return list.indexOf(word);
}//solutionDFS2() end
public void dfs2() {
if(sb.length()>5) return;
list.add(sb.toString());
for(int i=0; i<5; i++) {
sb.append("AEIOU".charAt(i));
dfs2();
sb.deleteCharAt(sb.length()-1);
}//for end
}//dfs() end
조금 빨라진 것을 알 수 있다.
'자료구조 & 알고리즘 > 문제풀이' 카테고리의 다른 글
피로도 - 프로그래머스 (Java, Level 2) (0) | 2022.03.02 |
---|---|
두 개 이하로 다른 비트 - 프로그래머스 (Java, Level 2) (0) | 2022.03.02 |
최댓값과 최솟값 - 프로그래머스 (Java, Level 2) (0) | 2022.02.21 |
구명보트 - 프로그래머스 (Java, level 2) (0) | 2022.02.18 |
큰 수 만들기 - 프로그래머스 (Java, Level 2) (0) | 2022.02.18 |
댓글