Contents

λͺ¨μŒ 사전 (with.Java)

   Aug 12, 2024     2 min read

λͺ¨μŒ 사전 (with.Java) λ¬Έμ œμ— λŒ€ν•˜μ—¬ μ•Œμ•„λ³Έ κΈ€μž…λ‹ˆλ‹€.

μ½”λ”© ν…ŒμŠ€νŠΈ 문제λ₯Ό ν’€λ©°, ν’€μ—ˆλ˜ λ¬Έμ œμ— λŒ€ν•œ 회고λ₯Ό ν•΄λ³΄κ³ μž ν•©λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•΄ λ¨Όμ € μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

문제

사전에 μ•ŒνŒŒλ²³ λͺ¨μŒ β€˜A’, β€˜E’, β€˜I’, β€˜O’, β€˜Uβ€™λ§Œμ„ μ‚¬μš©ν•˜μ—¬ λ§Œλ“€ 수 μžˆλŠ”, 길이 5 μ΄ν•˜μ˜ λͺ¨λ“  단어가 μˆ˜λ‘λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μ „μ—μ„œ 첫 번째 λ‹¨μ–΄λŠ” β€œA”이고, κ·Έλ‹€μŒμ€ β€œAA”이며, λ§ˆμ§€λ§‰ λ‹¨μ–΄λŠ” β€œUUUUUβ€μž…λ‹ˆλ‹€.

단어 ν•˜λ‚˜ wordκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 이 단어가 μ‚¬μ „μ—μ„œ λͺ‡ 번째 단어인지 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

μ œν•œμ‚¬ν•­

  • word의 κΈΈμ΄λŠ” 1 이상 5 μ΄ν•˜μž…λ‹ˆλ‹€.
  • wordλŠ” μ•ŒνŒŒλ²³ λŒ€λ¬Έμž β€˜A’, β€˜E’, β€˜I’, β€˜O’, β€˜Uβ€™λ‘œλ§Œ 이루어져 μžˆμŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ μ˜ˆμ‹œ

wordresult
β€œAAAAE”6
β€œAAAE”10
β€œI”1563
β€œEIO”1189

λ¬Έμ œμ— λŒ€ν•œ λ‚˜μ˜ 풀이

import java.util.ArrayList;

class Solution {
    static ArrayList<String> list;
    static String[] words = {"A", "E", "I", "O", "U"};

    public int solution(String word) {
        int answer = 0;
        list = new ArrayList<>();

        dfs("", 0);
        int size = list.size();

        for (int i = 0; i < size; i++) {
            if (list.get(i).equals(word)) {
                answer = i;
                break;
            }
        }

        return answer;
    }

    static void dfs(String str, int len) {
        list.add(str);
        if (len == 5) return;

        for (int i = 0; i < 5; i++) {
            dfs(str + words[i], len + 1);
        }
    }
}

풀이 μ„€λͺ…

  • word: 찾고자 ν•˜λŠ” λ¬Έμžμ—΄
  • answer: 결과값을 μ €μž₯ν•˜λŠ” λ³€μˆ˜
  • λ‹¨μ–΄λ“€μ˜ λͺ¨λ“  쑰합을 μƒμ„±ν•œ ν›„, 주어진 λ¬Έμžμ—΄μ΄ λͺ‡ 번째둜 λ‚˜μ˜€λŠ”μ§€ ν™•μΈν•˜μ—¬ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • DFS 탐색을 ν†΅ν•œ 단어 생성
  • dfs λ©”μ„œλ“œλ₯Ό 톡해 λ‹¨μ–΄μ˜ λͺ¨λ“  쑰합을 μƒμ„±ν•©λ‹ˆλ‹€.
  • ν˜„μž¬ λ¬Έμžμ—΄ str에 각각의 λͺ¨μŒμ„ μΆ”κ°€ν•˜μ—¬ λ‹€μŒ 레벨의 λ¬Έμžμ—΄μ„ μƒμ„±ν•©λ‹ˆλ‹€.
  • DFS 탐색을 톡해 λͺ¨λ“  쑰합을 μƒμ„±ν•˜κ³ , 이λ₯Ό list에 μ €μž₯ν•©λ‹ˆλ‹€.
  • 주어진 λ¬Έμžμ—΄μ΄ λͺ‡ 번째둜 λ‚˜μ˜€λŠ”μ§€ 확인
  • μƒμ„±λœ λͺ¨λ“  쑰합을 ν™•μΈν•˜μ—¬ 주어진 λ¬Έμžμ—΄κ³Ό μΌμΉ˜ν•˜λŠ” 경우 ν•΄λ‹Ή 인덱슀λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

κ²°λ‘ 

μ΄λ ‡κ²Œ μ½”λ“œλŠ” DFS 탐색을 톡해 주어진 λͺ¨μŒμœΌλ‘œ κ΅¬μ„±λœ λ‹¨μ–΄λ“€μ˜ λͺ¨λ“  쑰합을 μƒμ„±ν•˜κ³ , 주어진 λ¬Έμžμ—΄μ΄ λͺ‡ 번째둜 λ‚˜μ˜€λŠ”μ§€λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€.