Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Spring
- 2166번
- SerialDate 리펙터링
- java의 정석
- Design Pattern
- 9장
- springboot
- 프로그래머스
- Adapater Pattern
- programmers
- 자바의 정석
- 2206번
- 가장 긴 증가하는 부분 수열2
- BOJ
- DxTrace
- 11286번
- Dxerr.h
- 10830번
- 코딩 테스트
- Design Patterns
- 냄새와 휴리스틱
- 17장
- 2156번
- 1043번
- java
- 1300번
- 백준
- 클린코드
- 코딩테스트
- 11758번
Archives
- Today
- Total
Don't give up!
[프로그래머스] 단어 변환 (java) 본문
코딩테스트 연습 - 단어 변환 | 프로그래머스 (programmers.co.kr)
어떻게 생각하고 문제를 풀었는가?
최단 변환의 수를 구해야 하는 문제이므로 BFS를 통해 문제를 해결하고자 하였습니다.
코드
import java.util.*;
class Solution {
public int solution(String begin, String target, String[] words) {
boolean[] visited = new boolean[words.length];
Queue<Word> queue = new LinkedList<>();
queue.offer(new Word(begin,0));
while(!queue.isEmpty()){
Word word = queue.poll();
if(target.equals(word.value)) return word.count;
for(int i=0;i<words.length;i++){
if(!visited[i] && isConvertable(word.value,words[i])){
visited[i] = true;
queue.offer(new Word(words[i],word.count+1));
}
}
}
return 0;
}
boolean isConvertable(String A, String B){
int difference = 0;
for(int j=0;j<A.length();j++){
if(A.charAt(j)!=B.charAt(j)) difference++;
if(difference>1) return false;
}
return true;
}
class Word{
String value;
int count;
Word(String value, int count){
this.value = value;
this.count = count;
}
}
}
테스트를 통과하는 코드를 작성하였습니다.
변환할 수 있는 문자를 판단한 후 Queue에 삽입하여 다음 변환을 대기합니다.
변환 시도의 수를 반환하기 위해서는 해당 문자가 몇번 변환을 거쳐간 문자인지 기억할 필요가 있습니다.
클래스 Word를 선언하여 문자열과 변환 횟수를 함께 저장함으로서 이를 해결하고자 하였습니다.
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스] 네트워크 (java) (0) | 2021.05.22 |
---|---|
[프로그래머스] 가장 먼 노드(java) (0) | 2021.05.18 |
[프로그래머스] 카펫(java) (0) | 2021.05.17 |