[프로그래머스] 단어 변환 (java)

HaYeong Jang·2021년 4월 5일
0
post-thumbnail
post-custom-banner

🔗 문제링크

https://programmers.co.kr/learn/courses/30/lessons/43163

👩🏻‍💻 코드

class Solution {
    static boolean[] visited;
    static int answer = 0;
    
    public int solution(String begin, String target, String[] words) {
        visited = new boolean[words.length];

        dfs(begin, target, words, 0);
        return answer;
    }
    
    public static void dfs(String begin, String target, String[] words, int cnt) {
        if (begin.equals(target)) {
            answer = cnt;
            return;
        }

        for (int i = 0; i < words.length; i++) {
            if (visited[i]) {
                continue;
            }

            int k = 0;    // 같은 스펠링 몇개인지 세기
            for (int j = 0; j < begin.length(); j++) {
                if (begin.charAt(j) == words[i].charAt(j)) {
                    k++;
                }
            }

            if (k == begin.length() - 1) {  // 한글자 빼고 모두 같은 경우
                visited[i] = true;
                dfs(words[i], target, words, cnt + 1);
                visited[i] = false;
            }
        }
    }
}

📝 정리

알고리즘을 보면 다음과 같다.

  1. 한 글자 빼고 나머지가 같은 단어를 words에서 찾는다.
  2. 찾은 단어를 visited = true 로 설정해 준다.
  3. cnt를 증가시키며 dfs 함수를 재귀 호출한다.
  4. 모든 경우의 수를 보기 위해 visited = false로 재설정한다.
  5. begin과 target이 같은 경우, cnt를 answer에 대입하고 종료한다.
profile
기억하기 위해 기록하는 개발로그👣
post-custom-banner

4개의 댓글

comment-user-thumbnail
2021년 7월 23일

궁금한게 저렇게 하면 리턴이 결국 여러개 되던데, 리턴값 중에 최소값만 빼야되는거 아닌가요?
테스트는 통과하긴 하던데,,, 테스트케이스가 부족한가 싶고 햇갈리네요

1개의 답글
comment-user-thumbnail
2021년 8월 9일

안녕하세요 문제풀이 깔끔하게 하셔서 잘봤습니다 ㅎㅎ
그런데 최소값 비교 로직이 없는거 같아서 댓글남겨요!
예를들어 hot, dot, lot, cog, log, dog으로 들어온다면 리턴값이 5가 되네요 ㅜㅜ
return 부분에 로직 넣으면 될 것 같습니다!

1개의 답글