[프로그래머스] 위클리챌린지 5주차 모음사전
https://programmers.co.kr/learn/courses/30/lessons/84512?language=java
코딩테스트 연습 - 5주차_모음사전
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
위클리챌린지 중에 해결못한 문제를 골라 풀고 있다. 이 문제는 재귀나 DFS 등을 이용해서 풀 수 있을 것 같은데 나는 그냥 문자 최대 갯수가 5로 제한되어 있어서 5중 반복문을 돌렸다. 정확하긴 하겠지만 이 방법은 문자 개수가 많아지만 시간 초과가 뜰 가능성이 매우 높다.
1. 문자 A, E, I, O, U를 각각 1~5로 생각하고 5중 반복문을 이용해 리스트에 모든 값들을 저장한다.
1-1. 이 때 이전 반복문 단계에서 설정된 값은 다음 반복문 단계까지 가지고 와야한다.
2. 입력받은 파라미터 word를 역시 리스트의 value와 비교하기 위해 각각 1~5로 바꿔서 저장(index)해둔다.
3. 리스트의 value값과 word를 숫자로 변환한 값을 비교해서 같으면 그 인덱스+1을 리턴한다.
문제 및 입출력
코드
import java.util.ArrayList;
class Solution
{
public int solution(String word)
{
String index = "";
String num = "";
int answer = -1;
ArrayList<Integer> list = new ArrayList<Integer>();
/* 반복문 값을 사용하기 위해 문자를 각각 숫자 생각하고 치환해서 리스트 VALUE에 저장
A:1 // E:2 // I:3 // O:4 // U:5
*/
for(int i=1; i<=5; i++)
{
num = i + "";
list.add(Integer.parseInt(num));
for(int j=1; j<=5; j++)
{
num = i + "" + j;
list.add(Integer.parseInt(num));
for(int k=1; k<=5; k++)
{
num = i + "" + j + "" + k;
list.add(Integer.parseInt(num));
for(int m=1; m<=5; m++)
{
num = i + "" + j + "" + k + "" + m;
list.add(Integer.parseInt(num));
for(int n=1; n<=5; n++)
{
num = i + "" + j + "" + k + "" + m + "" + n;
list.add(Integer.parseInt(num));
}
}
}
}
}
// 파라미터로 받은 word를 리스트의 값과 비교하기 위해 1~5까지 치환
for(int i=0; i<word.length(); i++)
{
if(word.charAt(i)=='A')
{
index += "" + 1;
}
else if(word.charAt(i)=='E')
{
index += "" + 2;
}
else if(word.charAt(i)=='I')
{
index += "" + 3;
}
else if(word.charAt(i)=='O')
{
index += "" + 4;
}
else if(word.charAt(i)=='U')
{
index += "" + 5;
}
}
// 치환한 값을 리스트의 VALUE와 비교해서 결과 인덱스를 리턴
for(int i=0; i<list.size(); i++)
{
if(index.trim().equals(list.get(i)+""))
{
answer = i+1;
break;
}
}
return answer;
}
}