소토
소토의 기록하는 삶
소토
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Algorithm (34)
      • Problem (34)
    • Web (0)
    • ML & AI (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 직장인자기계발
  • 백준
  • 문제
  • 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
  • 알고리즘
  • 코드스테이츠
  • 직장인인강
  • 패스트캠퍼스
  • 패캠챌린지
  • 패스트캠퍼스후기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
소토

소토의 기록하는 삶

Algorithm/Problem

[Programmers] 단어 변환 - Java

2022. 2. 18. 13:38

Level 3

 

코딩테스트 연습 - 단어 변환

두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수

programmers.co.kr

 

문제 풀이

DFS 문제 

 

우선 문제에서 주어진 조건대로 철자 하나씩만 바꿔야하기 때문에 두개이상 달라지면 false를 반환하는 함수를 만들어줬다. 

그리고 재귀함수에서 한개만 달라지는지 확인하고 그게 맞으면 방문처리하는 식으로 dfs를 구현했다.

 

몇 개의 단계를 거쳤는지 확인하기 위해 stage 변수를 만들고 target과 같게되면 바로 최소값과 비교해 저장한다.

 

여기서 주의해야 할 것은 그냥 "=="연산자로 문자열을 비교하면 안된다는 것! 주소값이 다르면 다르다고 반환하기 때문에 String 클래스의 equals메서드를 이용해야 같은 문자열인지 알 수 있다.

 

코드

class Solution {
    public int min = 9999999;

    public void dfs(String begin, String target, String[] words, int stage, int[] visited) {
        if (target.equals(begin)) {
            if (stage < min) {
                min = stage;
            }
            return;
        }

        for (int i=0; i<words.length; i++) {
            if(checkWords(begin, words[i]) && visited[i] == 0) {
                visited[i] = 1;
                dfs(words[i], target, words, stage + 1, visited);
                visited[i] = 0;
            }
        }

    }

    public boolean checkWords(String checkWord1, String checkWord2) {
        boolean check = false;

        for (int i = 0; i < checkWord1.length(); i++) {
            char a = checkWord1.charAt(i);
            char b = checkWord2.charAt(i);

            if (a!=b) {
                if (check) return false;
                check = true;
            }
        }
        return true;
    }

    public int solution(String begin, String target, String[] words) {
        int[] visited = new int[words.length];
        dfs(begin, target, words, 0, visited);

        if (min == 9999999) return 0;
        else return min;
    }
}
728x90
저작자표시 (새창열림)

'Algorithm > Problem' 카테고리의 다른 글

[Baekjoon] 23288번 : 주사위 굴리기 2 - Python  (0) 2022.02.22
[Programmers] 여행 경로 - Java  (0) 2022.02.18
[Programmers] 네트워크 - Java  (0) 2022.02.18
[Programmers] 타겟넘버 - Java  (0) 2022.02.17
[Baekjoon] 14499번 : 주사위 굴리기 - Python  (0) 2022.02.14
    소토
    소토

    티스토리툴바