🧠 Algorithm/[JAVA] Programmers

[84512번] 모음사전

0_ch4n 2022. 7. 7. 14:05
반응형

위클리 챌린지

 

✔️ 문제 설명

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

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

 

더보기

✔️ 입출력 예

입출력 예 #1

사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.

 

입출력 예 #2

"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.

 

입출력 예 #3

"I"는 1563번째 단어입니다.

 

입출력 예 #4

"EIO"는 1189번째 단어입니다.

 

✔️ 제한 사항

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

 

✔️ 코드 구상

모음만으로 만든 단어는 A, AA, AAA, AAAA, AAAAA, AAAAE, AAAAI ... 순서이다.

중복조합으로 모음으로 만들 수 있는 모든 경우의 수를 문제에서 예시로 준 순서처럼 만든 후

word를 찾아서 발견된 인덱스를 반환하면 쉽게 풀릴 것이다.

 

✔️ 코드

import java.util.*;

class Solution {
    public int solution(String word) {
        int answer = 1;
        String[] s = {"A","E","I","O","U"};
        List<String> cases = new ArrayList<>();
        String[] bucket = {"", "", "", "", ""};

        getAllCase(cases, s, bucket, 0);

        for (String str : cases) {
            if(str.equals(word)) {
                break;
            }
            answer++;
        }

        return answer;
    }

    public void getAllCase(List<String> list, String[] s, String[] bucket, int index) {
        if(index >= s.length) {
            return;
        }

        for(int i = 0; i < s.length; i++) {
            bucket[index] = s[i];
            list.add(toString(bucket));
            getAllCase(list, s, bucket, index + 1);
        }

        bucket[index] = "";
    }

    public String toString(String[] arr) {
        String temp = "";

        for (String str : arr) {
            temp += str;
        }

        return temp;
    }
}

 

📄 원문

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

반응형