프로그래머스/코딩테스트 고득점 Kit

[완전탐색] 모음사전 (JAVA)

댈팽이 2024. 2. 1. 15:17
728x90

# 문제 설명

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

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.


제한사항

  • word의 길이는 1 이상 5 이하입니다.
  • word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.

입출력 예

word result

"AAAAE" 6
"AAAE" 10
"I" 1563
"EIO" 1189

 

# 정답 코드

	public static String[] words = {"A", "E", "I", "O", "U"};
	public static ArrayList<String> list = new ArrayList<>(); //모든 단어 저장
	
	public static int solution(String word) {
        int answer = 0;
        
        dfs("", 0);
        
        for (int i = 0; i < list.size(); i++) {
        	if (list.get(i).equals(word)) {
        		answer = i;
        		break;
        	}
        }
        
        return answer;
    }
	
	public static void dfs(String word, int length) {
		list.add(word);
		
		if (length == 5) {
			return;
		}
		
		for (int i = 0; i < words.length; i++) {
			dfs(word + words[i], length + 1);
		}
	}

 

알파벳 모음을 words에 저장한다.

만들 수 있는 모든 단어를 저장하기 위해 list를 사용한다.

 

재귀함수를 사용하여 모든 단어를 만든다.

현재 단어와 현재 단어의 길이를 받아 함수를 돌린다.

현재 단어를 list에 저장하고, 만약 단어 길이가 5이면 종료한다.

반복문을 통해 다음 단어를 찾는다.

 

list에는 단어가 A, AA, AAA, AAAA 와 같이 순서대로 저장된다.

따라서 해당 단어가 몇 번째 단어인지 구하려면 해당 단어의 list 인덱스를 찾으면 된다.

반복문으로 list를 순회하면서 해당 단어인지를 찾아 인덱스를 리턴한다.

728x90