Algorithm/Programmers Java

[Java] 프로그래머스 level2 모음사전

제우제우 2024. 4. 22. 00:14

https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

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

programmers.co.kr

 

코딩테스트 연습 > 완전탐색 > 모음사전

 

문제 설명

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.

 

제한 사항

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

 

문제 접근

완전탐색 문제이다. 조금 무식한 방법으로 해결했다.

먼저 A == 0 E == 1 I == 2 O == 3 U == 4 이렇게 생각을 하자

재귀 호출로 문자열을 만들면서 Map에 넣어주었다. key 문자열 value는 호출된 순서 

호출된 순서가 곧 사전 순서이다. 

그렇게 재귀를 돌고나서 들어온 문자를 0 ~ 4로 바꾼 다음에 

map에서 꺼내서 리턴해주었다. 

정답 코드

import java.util.*;

class Solution {
    static int cnt = 1;
    static HashMap<String, Integer> map = new HashMap<>();
    // A == 0 E == 1 I == 2 O == 3 U == 4 
    public int solution(String word) {
        init(0, "");
             
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < word.length(); i++){
             char target = word.charAt(i);
             if(target == 'A') sb.append(0);
             else if(target == 'E') sb.append(1);
             else if(target == 'I') sb.append(2);
             else if(target == 'O') sb.append(3);
             else if(target == 'U') sb.append(4);
        }
        String key = sb.toString();
        return map.get(key);
    }
    public static void init(int depth, String cur){
       if(depth == 5) return;
       
        for(int i = 0; i < 5; i++){
             String next = cur + Integer.toString(i);
             map.put(next, cnt);
             cnt++;
             init(depth + 1, next);
        }
    }
}