inblog logo
|
LHS's Study Space
    알고리즘문제풀기프로그래머스

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

    lhs's avatar
    lhs
    Nov 13, 2024
    [프로그래머스] 모음사전(84512)
    Contents
    1. 문제 풀이 아이디어2. 나의 정답 코드3. 정리4. 더 좋은 코드 리뷰
    school.programmers.co.kr
    https://school.programmers.co.kr/learn/courses/30/lessons/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

    RSS·Powered by Inblog