강의로 돌아가기
conda-12

팁을 좀 적자면.. (정답주의)

12
1 11 12
2 21 22

123
1 11 111 112 113 12 121 122 123 13 131 132 133
2 21 211 212 213 22 221 222 223 23 231 232 233
3 31 311 312 313 32 321 322 323 33 331 332 333

경우의 수

문자의 종류는 5개
문자열 길이는 1, 2, 3, 4, 5 다섯개
5 + 25 + 125 + 625 + 3125 = 3905
문자간의 거리 = 경우의 수 총합 / 문자열 길이의 경우의 수(1=5, 2= 25, 3= 125, 4=625, 5=3125)

문자열 종류는 3개
문자열 길이는 1, 2, 3 세개
3 + 9 + 27 = 49
문자간의 거리 = 경우의 수 총합 / 문자열 길이의 경우의 수(1=3, 2= 9, 3= 27)

문자열 종류는 2개
문자열의 길이는 1, 2 두개
2 + 4 = 6
문자간의 거리 = 경우의 수 총합 / 문자열 길이의 경우의 수(1=2, 2=4)


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

위의 글을 조건으로 경우의 수를 계산한다면

문자의 종류는 5개
문자열 길이는 1, 2, 3, 4, 5 다섯개
5 + 25 + 125 + 625 + 3125 = 3905
문자간의 거리 = 경우의 수 총합 / 문자열 길이의 경우의 수(1=5, 2= 25, 3= 125, 4=625, 5=3125)

첫 번째 자리 경우 간격 781 (3905 / 5)
두 번째 자리 경우 간격 156 (3905 / 25)
세 번째 자리 경우 간격 31 (3905 / 125)
네 번째 자리 경우 간격 6 (3905 / 625)
다섯 번째 자리 간격 1 (3905 / 3125)

예시 = AAAE

간격 1 + 1 + 1 + 6 = 9
A는 +1 만 하면 되니까 넘어가고
E는 네 번째 자리로 간격은 6.
E는 순서로 1 번째이니까 6 * 1.
결과 : 9 + 1 = 10 (간격이 9이니 10번째가 찾는 문자가 된다)

작성중인 코드―Solution.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Solution {
    public int solution(String word) {
        int answer = 0;
        // 종 문자열 길이 
        int length = word.length();
        // 종류의 수
        int numberOfWords = 5;
        // 경우의 수 총합 
        int max = 0;
        for(int i = 1; i <= numberOfWords; i++) {
            max += Math.pow(numberOfWords, i);
        }
        //  ['A', 'E', 'I', 'O', 'U'] 순서 [0, 1, 2, 3, 4]
        for (int i = 1; i <= length; i++) {
            if (word.charAt(i-1) == 'A') {
                answer += 1;
            } else if (word.charAt(i-1) == 'E') {
                answer += ((max / Math.pow(numberOfWords, i)) * 1) + 1;
            } else if (word.charAt(i-1) == 'I') {
                answer += ((max / Math.pow(numberOfWords, i)) * 2) + 1;
            } else if (word.charAt(i-1) == 'O') {
                answer += ((max / Math.pow(numberOfWords, i)) * 3) + 1;
            } else {
                answer += ((max / Math.pow(numberOfWords, i)) * 4) + 1;
            }
        }

        return answer;
    }
}
  • 오국원

    천재시네요

    오국원―2022.01.11 18:08
  • 푸르

    와 덕분에 이해하고갑니다. 감사합니다!

    푸르―2022.04.18 15:38
  • 이명진

    슨생님 다 이해되지는 않았지만 공식처럼 일단 적용해봤는데 +1은 왜해주는건가요 ?

    이명진―2022.05.12 17:16
  • 김동건

    이런 생각 어떻게 해요?

    김동건―2022.07.02 10:49
0 개의 답변
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.