[99클럽 코테 스터디 6일차 TIL] DFS

qk·2024년 6월 2일
0

회고

목록 보기
6/33
post-thumbnail

📖 오늘의 학습 키워드
DFS

오늘의 회고

문제

[단어 변환]
https://school.programmers.co.kr/learn/courses/30/lessons/43163

나의 해결

class Solution {
    public boolean[] visited;
    public int answer;
    public int solution(String begin, String target, String[] words) {
        answer = Integer.MAX_VALUE;
        visited = new boolean[words.length];
        dfs(begin, target, words, 0);
        if(answer == Integer.MAX_VALUE) {
            answer = 0;
        }
        return answer;
    }
    public void dfs(String now, String target, String[] words, int count) {
        if(now.equals(target)){
            answer = Math.min(answer, count);
            return;
        }
        for(int i = 0; i < words.length; i++) {
            if(!visited[i] && diff(now, words[i])){
                visited[i] = true;
                dfs(words[i], target, words, count+1);
                visited[i] = false;
            }
        }
    }
    public boolean diff(String a, String b){
        int count = 0;
        int len = a.length();
        for(int i = 0; i < len; i++){
            if(a.charAt(i) != b.charAt(i)){
                count++;
            }
        }
        if(count == 1) {
            return true;
        }
        return false;
    }
}
  1. DFS를 이용해서 begin 단어에서 target 단어로 변환할 수 있는 모든 경우의 수를 구한다.
    • 변환 과정 중 다음 단어는 아직 한 번도 사용하지 않고 현재 단어와 알파벳이 하나만 다른 것으로 선택한다.
    • target 단어가 되었을 때까지 필요한 단계(count)를 answer와 비교해서 count가 더 작을 경우 answer를 count의 값으로 갱신한다.

새로 학습한 내용

DFS를 복습할 수 있었다.

0개의 댓글