문제
https://programmers.co.kr/learn/courses/30/lessons/84512
코딩테스트 연습 - 모음사전
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
풀이코드
public int solution(String word) { //모음사전
int answer = 0;
int total= 3905; //총 나올수 있는 경우의 수
String tmp="AEIOU"; //알파벳 모음의 순서
for(String str: word.split("")){
//첫째, 둘째, 셋째, 넷째, 다섯번째자리에 모음이 바뀔 때마다 올라가는 숫자
//781, 156, 31, 6, 1
total/= 5; //모음이 5개이므로 경우의 수에서 5로 나누어줌
answer+= total*tmp.indexOf(str)+1; //경우의 수를 계산
}
return answer;
}
우선 이 문제에서 AEIOU로 만들 수 있는 모든 단어의 갯수는 3905개인데 그 이유는
한 자리 수일때, 5가지
두 자리 수일때, 5x5해서 25가지
세 자리 수일때, 5x5x5해서 125가지
네 자리 수일때, 5x5x5x5해서 625가지
다섯 자리 수일때, 5x5x5x5x5해서 3125가지
이렇게 나오는데 이 경우의 수를 다 더하면 3905개가 나온다.
3905에서 5를 나누면 781이 나오고 -> 제일 앞자리 모음이 바뀔 때, 변하는 수
781에서 5를 나누면 156.xx가 나오고 -> 앞에서 두번째자리 모음이 바뀔 때, 변하는 수
...
이런 식으로 하면
//첫째, 둘째, 셋째, 넷째, 다섯번째자리에 모음이 바뀔 때마다 올라가는 숫자
//781, 156, 31, 6, 1
이렇게 된다.
그래서 for문이 한번 돌때마다, total에서 5를 나눠주는 것이고
answer+= total*tmp.indexOf(str)+1;
여기에서 tmp(AEIOU)에서 각 모음의 index위치를 찾아서 total값을 곱해서 answer에 더해줘서 답을 구한다.
'프로그래머스 > Level 2' 카테고리의 다른 글
| [프로그래머스][Level2][Java] 전화번호 목록 (0) | 2022.06.11 |
|---|---|
| [프로그래머스][Level2][Java] 2xn 타일링 (0) | 2022.06.04 |
| [프로그래머스][Level2][Java] 괄호 변환 (0) | 2022.05.17 |
| [프로그래머스][Level2][Java] 위장 (0) | 2022.05.17 |
| [프로그래머스][Level2][Java] 튜플 (0) | 2022.04.14 |