baekjoon/Graph_Search

프로그래머스 Lv2 모음사전 자바

Meluu_ 2024. 8. 25. 14:41

🧫 문제 분석

✔️ 출처

모음사전 level 2

📖 문제

 

정말 어려워했던 문제이다.

결국에는 풀었다. 

 

A : 1

E : 2

I : 3

O : 4

U : 5

로 바꾸고 

 

이에 맞춰서 완전탐색을 해서 매개변수로 넘어온 word 와 equals로 비교한 후 같다면 

깊이 탐색을 멈추고 count를 반환한다.

 


🔅 문제 풀이

class Solution {
    int count = 0;
    boolean flag = false;
    StringBuilder sb = new StringBuilder();
    
    public int solution(String word) {
        dfs(trans(word), 0);
        return count;
    }
    
    private void dfs(String word, int depth) {

        if (sb.toString().equals(word)) {
            flag = true;
            return;
        }

        if (depth > 4) {
            return;
        }

        for (int i = 1; i <= 5; i++) {
            if (flag) return;

            count++;
            sb.append(i);
            dfs(word, depth+1);
            sb.deleteCharAt(sb.length() - 1);
        }
    }

    private String trans(String word) {
        String s = "";
        for (int i = 0; i < word.length(); i++) {
            if (word.charAt(i) == 'A') s += '1';
            else if (word.charAt(i) == 'E') s += '2';
            else if (word.charAt(i) == 'I') s += '3';
            else if (word.charAt(i) == 'O') s += '4';
            else if (word.charAt(i) == 'U') s += '5';

        }

        return s;
    }
}

 

 

 

 

🔅 다른 사람 풀이를 참고하여 리팩토링

class Solution {
    int count = 0;
    boolean flag = false;
    StringBuilder sb = new StringBuilder();
    
    public int solution(String word) {
        dfs(word, 0);
        return count;
    }
    
    private void dfs(String word, int depth) {

        if (sb.toString().equals(word)) {
            flag = true;
            return;
        }

        if (depth > 4) return;
        
        for (int i = 1; i <= 5; i++) {
            if (flag) return;
            count++;
            sb.append("AEIOU".charAt(i - 1));
            dfs(word, depth+1);
            sb.deleteCharAt(sb.length() - 1);
        }
    }

}

 

2~3배는 빨라진것 같다. 

 

❗ 오답노트 / 필요한 지식

  1. 배울점이 많다. 문자열 charAt은 알고 있었으면서 저렇게 쓰는법을 몰라서 하나하나 숫자로 변환하니 느릴 수 밖에 없다. 잘 기억하자.