본문 바로가기
Algorithm/Programmers

Algorithm - JAVA : Programmers() { 5주차_모음사전 }

by yaans 2021. 10. 13.

 

 

Algorithm - JAVA : Programmers() { 5주차_모음사전 }

 

 

규칙이 쉬워보여서 가벼운 마음으로 시작했던 문제였는데

생각보다 헷갈려서 시간 많이 잡아먹었다 😋

 

 

 

https://programmers.co.kr/learn/courses/30/lessons/84512

 

코딩테스트 연습 - 5주차_모음사전

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니

programmers.co.kr

 

 

풀이 과정

문제를 처음 고민했을 때,

5글자라는 작은 범위이다보니 직접 모음 사전을 만든 다음 완전탐색도 가능해보였지만, 직접 해보진 않았다

 

 

규칙을 제대로 이해해보기 위해 직접 하나하나 작성해보았다

 

단어를 정렬하다 보이는 특징은 각 인덱스자리마다 다음 모음 차례가 규칙적이라는 것이다

 

마지막 인덱스의 경우

AAAA
E -> A +1 
I  -> E +1
O -> I +1
U -> O +1

 

세 번째 인덱스(네번째 문자)의 경우

EEE
E -> A +6 
I  -> E +6
O -> I +6
U -> O +6

와 같이 점화식이 존재한다

 

이제 코드와 함께 보자

 

 

작성 코드

class Solution {
    public int solution(String word) {
        int answer = 0;

        String vowel = "AEIOU";
        int[] gap = new int[]{781, 156, 31, 6, 1};

        int index;
        for (int i=0; i<word.length(); i++) {
            index = vowel.indexOf(word.charAt(i));
            answer += gap[i]*index + 1;
        }

        return answer;
    }
}

 

점화식 패턴을 상수화 하여 int[] 배열 gap을 초기화해두었다

 

단어 길이만큼 인덱스를 순회하며, 인덱스의 문자를 확인한다

모음 단어의 순서만큼 gap을 더한다

 

word가 'E' 라면?

'A' + gap[0]*1
->
1 + 781*1 = 782

 

 

후기

옛날엔 이런 스타일의 문제 꽤 좋아했었는데

이번에 풀어보니 아쉬움이 남더라. 알고리즘 꾸준히 놓지 말아야겠다. 

댓글