https://school.programmers.co.kr/learn/courses/30/lessons/84512
코딩테스트 연습 > 완전탐색 > 모음사전
문제 설명
사전에 알파벳 모음 '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);
}
}
}
'Algorithm > Programmers Java' 카테고리의 다른 글
[Java] 프로그래머스 level3 자물쇠와 열쇠 (0) | 2024.04.25 |
---|---|
[Java] 프로그래머스 level3 숫자게임 (0) | 2024.04.24 |
[Java] 프로그래머스 level3 선입 선출 스케줄링 (시간초과...) (0) | 2024.04.21 |
[Java] 프로그래머스 level3 베스트앨범 (1) | 2024.04.20 |
[Java] 프로그래머스 level3 연속 펄스 부분 수열의 합 (0) | 2024.04.19 |