본문 바로가기

카테고리 없음

[프로그래머스/ 코딩테스트 연습 ] 모음사전 - JAVA

 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

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

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

풀이코드

class Solution {
    public int solution(String word) {
        String s = "AEIOU";
	        int answer = word.length();
	        int[] x  = {781,156,31,6,1};
	        for(int i=0,size=word.length();i<size;i++) {
	        	answer+=x[i]*s.indexOf(word.charAt(i));
	        }
	        return answer;
    }
}

 

문제설명

문제는 위 수열의 규칙을 찾는 게 가장 중요한 문제이다. 
푸는데.. 힘드러따...
순서대로 식을 써보자면 

1: A 
2. AA 
3. AAA
4. AAAA      /// 10. AAAE  11 AAAEA 12 AAAEE 13 AAAEI 14 AAAEO 15 AAAEU 
5. AAAAA    6. AAAAE  7. AAAAI   8. AAAAO 9. AAAAU

4. AAAA    ->  ///11 AAAEA 12 AAAEE 13 AAAEI 14  AAAEO 15. AAAEU
4. AAAA    -> /// 5. AAAAA    6. AAAAE  7. AAAAI   8. AAAAO 9. AAAAU       

우선 
4번쨰 값인 AAAA에서 뒤에 A, E, I, O, U 로 변할수록
5. AAAAA  6. AAAAE 7. AAAAI 8. AAAAO 9.AAAAU 1씩 증가한다. 
이건 다른 뒤의 값에서도 마찬가지이다. 
11. AAAEA -> 12. AAAEE 13 AAAEI 14 AAAEO 15. AAAEU 처럼
그럼 이제 맨 뒤의 값이 있을 수록 1개씩 증가하며,
4번쨰 자리까지의 값을 구한다음 1을 증가시키면 그 뒤를 알 수 있다는 것을 알 수 있다. 

그럼 이제 4번째 자리들이 변하는 것에 따른 규칙을 찾아야 한다. 
4 AAAA  10. AAAE 16. AAAI .... (22 AAAO 28 AAAU 
앞에서 쓴 규칙에 따라서 네번쨰 자리가 바뀌는 데에는 6을 더하면 된다. 5개를 돌리는 개수+아무것도 없을때 해서 6씩 변하게 된다. 
그렇다면 4번쨰 자리위 수를 구하는 것에도 3번쨰 자리 3 (AAA) + 1+6 하면 그 다음 값을 구할 수 있다.
그럼 3번쨰 자리의 규칙은 
28.AAAU 29. AAAUA 30 AAAUE 31 AAAUI 32 AAAUO 33 AAAUU -> 34 AAE.
3 AAA -> 34. AAE  31씩 증가하게 된다.

1-> 6-> 31 은 규칙적으로 5개 모음이 돌아가는 것에 그 전 값*5 +1 이 된다. 
그럼 그 다음은 (31*5)=155 +1 해서 156 그 다음값은  156*5 = 780 + 1 해서 781 이 된다. 
이걸 통해서 
1. A -> 782 B -> 1563 I .. 이런 식을 구할 수 있다. 
이값을 쓰는 방법으로 
첫 값이 0이 아니므로 처음의 값들을 다 구해준다. 이 게 

 

위와 같은 식이 되고, 그 다음에 
answer 에 2번쨰 자리 값이 어떤게 있다면 그 값의, A라면. 0 , E는 1, I=2, O =3 U=4 를 곲하는 식으로 더해준다.
그 식을 구현한게 

위 코드가 되는 것이다. 여기서 x = {781,156,31,6,1}이 되는거고, 
s = AEIOU가 된다.