바위 뚫는중

[프로그래머스] Lv2. 모음사전 본문

Algorithms/프로그래머스

[프로그래머스] Lv2. 모음사전

devran 2023. 9. 9. 22:15
반응형

문제

문제 설명

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

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • word의 길이는 1 이상 5 이하입니다.
  • word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.

word result

"AAAAE" 6
"AAAE" 10
"I" 1563
"EIO" 1189

풀이

총 몇개의 단어가 나올 수 있을까??

한자리일때 경우의 수 5

두자리일때 25

세자리 125

네자리 625

다섯자리 3125

모두 더하면 3905의 경우의 수이다.

3905%5 = 781, 즉 각 AEIOU 첫글자로 시작가능한 단어는 781개다.

A가아닌 E로 시작하는 알파벳의 순서는 무조건 781 다음부터다.


처음에는 이해가 안갔음^^

오른쪽 알파벳이 AEIOU를 총 5번 거치고 1번을 더 지나야 하기때문에 5 + 1로 표현한다.

AAAAA AAAAE 의 차이 1 = 1

AAAA AAAE 차이 1*5 + 1 = 6

AAA AAE 차이 (1 * 5 + 1) * 5 + 1 = 31

AA AE 차이 ((1*5+1)*5+1)*5+1 ⇒ 156

A E 차이 (((1*5+1)*5+1)*5+1+*5+1 ⇒ 781

A와 E의 차이 781

AA와 AE의 차이

즉, 자릿수에 따라 781, 156, 31, 6, 1 순서대로 경우의 수가 발생한다.

class Solution {
	public int solution(String word) {
		String str = "AEIOU";
		int[] x = {781,156,31,6,1}; // 1 ~ 5 자릿수 경우의수
		int result = word.length();
    int index = 0;     
    //글자 전체 길이만큼 반복
		for(int i=0;i<word.length();i++){      
            // 단어가 AEIOU중 몇번쨰 인덱스인지 구한다 
			index = str.indexOf(word.charAt(i));
            // 그 인덱스에 해당하는 자릿수를 곱하여 계산한다
			result+=x[i]*index;
		}
		return result;
	}
}

어려워서 이것저것 서칭했는데,

난 사람들이 너무똑똑해서 놀랍다.. 많이 풀면 저렇게 능력껏 할 수 있는걸까……ㅜㅜ

Lv2 치고 쉽다는 사람들이 많다. 난 오히려 반대라고 생각했는걸!

울지말자 마니풀자~

반응형