[ 다먹살 ]/- Coding

[프로그래머스] 위클리챌린지 5주차 모음사전

엉망으로살기 2021. 9. 29. 14:54
반응형

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;
    }
}

 

반응형