inblog logo
|
πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog
    β˜•JavaπŸ’‘Coding Test

    [programmers] λͺ¨μŒμ‚¬μ „ - Java

    μ•ŒνŒŒλ²³ λͺ¨μŒ 'A', 'E', 'I', 'O', 'U'둜 λ§Œλ“€ 수 μžˆλŠ” 길이 5 μ΄ν•˜μ˜ 단어가 사전에 μˆ˜λ‘λ˜μ–΄ μžˆμ„ λ•Œ, μ£Όμ–΄μ§„ 단어가 μ‚¬μ „μ—μ„œ λͺ‡ 번째 단어인지 μ°ΎλŠ” λ¬Έμ œμž…λ‹ˆλ‹€. DFS λ°©μ‹μœΌλ‘œ 사전을 μƒμ„±ν•˜κ³ , ν•΄λ‹Ή μ‚¬μ „μ—μ„œ 단어가 μΆœν˜„ν•˜λŠ” μˆœμ„œλ₯Ό μ°Ύμ•„ λ¦¬ν„΄ν•˜λŠ” 방법을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. 이 방법은 사전을 μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 값을 좜λ ₯ν•  수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μž‘μ„±ν•˜λŠ” 데 λ„μ „ν•˜λŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
    DriedPollack's avatar
    DriedPollack
    Apr 18, 2024
    [programmers] λͺ¨μŒμ‚¬μ „ - Java
    Contents
    λͺ¨μŒμ‚¬μ „solution.java핡심 ν‚€μ›Œλ“œκ²°λ‘ !

    λͺ¨μŒμ‚¬μ „

    문제 μ„€λͺ…

    사전에 μ•ŒνŒŒλ²³ λͺ¨μŒ '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

    μž…μΆœλ ₯ 예 μ„€λͺ…

    μž…μΆœλ ₯ 예 #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번째 λ‹¨μ–΄μž…λ‹ˆλ‹€.

    solution.java

    import java.util.*; class Solution { List<String> list; String[] arr = {"A", "E", "I", "O", "U"}; public int solution(String word) { int answer = 0; list = new ArrayList<>(); // 사전 생성 for(int i = 0 ; i < 5; ++i) makeWord(arr[i], 1); // μ‚¬μ „μ—μ„œ 단어 탐색 for(int i = 0; i < list.size(); i++){ if(list.get(i).equals(word)) return i + 1; } return answer; } // dfsλ₯Ό μ΄μš©ν•œ 사전 생성 public void makeWord(String base, int depth){ list.add(base); if(depth == 5){ return; } for(int i = 0 ; i < 5; ++i) makeWord(base + arr[i], depth + 1); } }
     

    핡심 ν‚€μ›Œλ“œ

    • DFS λ°©μ‹μœΌλ‘œ 사전을 μƒμ„±ν•œ ν›„, ν•΄λ‹Ή μ‚¬μ „μ—μ„œ 단어가 μΆœν˜„ν•˜λŠ” μˆœμ„œλ₯Ό μ°Ύμ•„ λ¦¬ν„΄ν•œλ‹€.
      • μ‚¬μ „μ—μ„œ ν•΄λ‹Ή λ‹¨μ–΄μ˜ μˆœμ„œλ₯Ό μ°ΎκΈ° μœ„ν•΄μ„œλŠ” μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ” 자료ꡬ쑰λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λ―€λ‘œ, Listλ₯Ό μ‚¬μš©ν–ˆλ‹€.
     

    κ²°λ‘ !

    처음 ν•΄λ‹Ή λ¬Έμ œμ— μ ‘κ·Όν•  λ•Œ 사전을 μƒμ„±ν•˜μ§€ μ•Šκ³  μž…λ ₯ 값을 μ΄μš©ν•΄ λ°”λ‘œ 값을 좜λ ₯ν•˜λ € ν–ˆμ§€λ§Œ μ½”λ“œκ°€ 잘 μž‘μ„±λ˜μ§€ μ•Šμ•˜λ‹€.
    이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 1λΆ€ν„° 5κΉŒμ§€μ˜ 길이λ₯Ό κ°€μ§„ λͺ¨λ“  단어λ₯Ό ν¬ν•¨ν•˜λŠ” 사전을 미리 λ§Œλ“€κ³ , ν•΄λ‹Ή 사전을 νƒμƒ‰ν•˜λŠ” ν˜•νƒœλ‘œ μ½”λ“œλ₯Ό μˆ˜μ •ν–ˆλ‹€.
    μΆ”ν›„ 사전을 μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ 값을 좜λ ₯ν•  수 μžˆλŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μž‘μ„±ν•΄λ³΄κ³  μ‹Άμ—ˆλ‹€.
     
    Share article
    Contents
    λͺ¨μŒμ‚¬μ „solution.java핡심 ν‚€μ›Œλ“œκ²°λ‘ !

    πŸ‘¨πŸ»β€πŸ’»DriedPollack's Blog

    RSSΒ·Powered by Inblog