Lewis's Tech Keep
[프로그래머스] 모음 사전 - JAVA 본문
- 링크 : https://programmers.co.kr/learn/courses/30/lessons/84512?language=java
코딩테스트 연습 - 5주차_모음사전
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
- 참고 링크 : https://bangu4.tistory.com/241
[위클리챌린지] 5주 - 모음사전 - Java코드
https://programmers.co.kr/learn/courses/30/lessons/84512#qna 코딩테스트 연습 - 5주차 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다..
bangu4.tistory.com
- 풀이
: 풀다가 모르겠어서 답을 참고하게 되었다.
: A E I O U 가 하나씩 들어오는 순서가 아니라
: A -> AA -> AAA -> AAAA -> AAAAA 순으로 들어온다. (하나씩 규칙을 파악할 것이 아닌 전체의 흐름을 파악해야 한다.)
: AAAA[A] : 가장 끝 자리가 하나씩 올라갈 때 마다 1(5의 0승) 씩 증가한다.
: AAA[A]A : 두번 째 끝 자리가 하나씩 올라갈 때 마다 6(5의 1승 + 5의 0승) 씩 증가한다.
( Ex. AAA[A]A -> AAA[A]E -> AAA[A]I -> AAA[A]O -> AAA[A]U -> AAA[E] -> AAA[E]A)
: AA[A]AA : 세번째 끝 자리가 하나씩 올라갈 때 마다 31(5의 2승 + 5의 1승 + 5의 0승) 씩 증가한다.
... 이러한 규칙들이 반복된다.
: 그 이유는 A -> AA -> AAA -> AAAA -> AAAAA 가 약간 DFS 처럼 깊이 우선으로 도는데 이 때를 생각해보면
: 마지막 높이 노드에서 AAAAA -> AAAAE 라고 하면 1개만 탐색하면 바로 다음 것을 찾을 수 있고
: 두번 째 마지막 높이 노드 AAAAA -> AAAEA 는 마지막 노드 A, E, I, O, U 를 다 탐색(4번 이동)하고 다음 탐색하는 것이 다른 두번 째 높이 노드의 AAAE 5번 째 이동이고 AAAEA 는 6번 째가 된다. 이러한 원리로 하나씩 올라 갈 때마다 5(현재 각 층마다 노드 개수가 5개 이므로) 5의 n승 만큼 증가하게 되는 것이다.
- 피드백
: 규칙을 좀 더 넓게 보는 습관, 수학적으로 좀 더 생각하는 습관을 들여야겠다.
- 코드
class Solution {
public int solution(String word) {
String str = "AEIOU";
int[] dp = new int[5];
dp[0] = 1;
for (int i=1; i<5; i++) {
dp[i] = (int) Math.pow(5, i) + dp[i-1];
}
int index,result = word.length();
for(int i=0; i<word.length(); i++){
index = str.indexOf(word.charAt(i));
result += dp[4-i] * index;
}
return result;
}
}
'Java > 알고리즘' 카테고리의 다른 글
[BOJ] 비트 우정지수 - JAVA (0) | 2021.09.13 |
---|---|
[프로그래머스] 복서 정렬하기 - JAVA (0) | 2021.09.13 |
[프로그래머스] 카드 짝 맞추기 - JAVA (0) | 2021.08.26 |
[프로그래머스] 모두 0으로 만들기 - JAVA (0) | 2021.08.24 |
[프로그래머스] 광고 삽입 - JAVA (0) | 2021.08.23 |