-
[프로그래머스] DFS/BFS - 단어 변환알고리즘 공부/문제 풀이 2020. 8. 25. 23:11
단어를 만들 수 있는 가장 적은 변환 횟수를 리턴하는 문제라
너비 우선 탐색을 이용하겠다고 생각하였다.
탐색 구현까지는 어쩨 저쩨 했는데
최소 횟수를 어떻게 구하나 막막하던 쯤
Node를 만들기로 하였고 Node 클래스를 만들어 문제를 해결하였다.
package algorithmStudy; import java.util.*; class Node{ String val; int level; public Node(String v,int l) { val=v; level=l; } } public class dfsbfs { static boolean check(String a,String b) { int num=0; for(int i=0;i<a.length();i++) { if(a.charAt(i)!=b.charAt(i)) num++; } return num==1?true:false; } static int solution(String begin, String target, String[] words) { int answer = 0; Queue<Node> q = new LinkedList<>(); boolean[] visited=new boolean[words.length]; for(int i=0;i<words.length;i++) { visited[i]=false; if(begin.equals(words[i])) return 0; } q.add(new Node(begin,0)); while(!q.isEmpty()) { Node cur=q.poll(); if(target.equals(cur.val)) return cur.level; for(int i=0;i<words.length;i++) { //방문하지 않았고 1개의 문자만 다르다면 if(!visited[i] && check(cur.val,words[i])) { visited[i]=true; q.add(new Node(words[i],cur.level+1)); } } } return answer; } public static void main(String[] args) { // TODO Auto-generated method stub String begin="hit"; String target="cog"; String[] words= {"hot", "dot", "dog", "lot", "log", "cog"}; System.out.println(solution(begin,target,words)); } }
'알고리즘 공부 > 문제 풀이' 카테고리의 다른 글
[프로그래머스] 해시 - 전화번호 목록 (1) 2020.08.28 [프로그래머스] 해시 - 완주하지 못한 선수 (1) 2020.08.28 [프로그래머스] 깊이 우선 탐색 - 타겟 넘버 (1) 2020.08.25 [프로그래머스] 동적계획법 - 등굣길 (1) 2020.08.24 [프로그래머스] 동적 계획법 - 정수 삼각형 (1) 2020.08.23