[프로그래머스] 모음사전(84512)

lhs's avatar
Nov 13, 2024
[프로그래머스] 모음사전(84512)
 

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

LHS's Study Space