1. 문제 풀이 아이디어
- 백트래킹을 활용하는 방법도 고려할 수 있었지만, 성능을 고려하여 수학적인 접근 방식으로 문제를 풀기로 하였다.
- 단어 사전에서 각 단어가 앞에 오는 단어들의 경우의 수를 모두 구하고, 이를 더하면 주어진 단어가 몇 번째 위치에 있는지 알 수 있다.
2. 나의 정답 코드
class Solution {
public int solution(String word) {
int answer = 0;
int[] count = {781, 156, 31, 6, 1};
String vowels = "AEIOU";
for (int i = 0; i < word.length(); i++) {
answer += vowels.indexOf(word.charAt(i)) * count[i] + 1;
}
return answer;
}
}
3. 정리
- 각 단어 앞에 있는 단어들의 경우의 수는 처음에는
1
로 시작한다.
- 각 자리에서의 경우의 수는 모음의 개수인
5
를 곱하고, 거기에1
을 더해주면781, 156, 31, 6, 1
이 나온다.
- 이 경우의 수들을 구할 때,
indexOf
함수를 사용하여 모음의 인덱스를 찾고, 해당 인덱스에 경우의 수를 곱한다.
- 글자 수가 늘어날 때마다, 그에 맞게
1
을 더해 인덱스를 구한다.
4. 더 좋은 코드 리뷰
class Solution {
public int solution(String word) {
int answer = 0, per = 3905;
for(String s : word.split(""))
answer += "AEIOU".indexOf(s) * (per /= 5) + 1;
return answer;
}
}
- 경우의 수는 위에서 설명한 것처럼
5
로 나누는 방식과 동일하기 때문에, 배열을 따로 만들지 않고3905
부터 차례로 나누면서 계산하는 것이 더 깔끔해 보인다.
Share article