programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
import java.util.*;
class Solution {
public int solution(String begin, String target, String[] words) {
Queue<String> q = new LinkedList<String>();
boolean check[] = new boolean[words.length];
int answer = 1;
outer: for(int i=0; i<words.length; i++) {
boolean flag = false;
for(int j=0; j<begin.length(); j++) {
if(begin.charAt(j) != words[i].charAt(j)) {
if(flag == true) continue outer;
flag = true;
}
}
if(flag==true) { // 1개가 바껴있다면
if(words[i].equals(target)) { // 정답이랑 같다면??
return answer;
}
check[i] = true;
q.offer(words[i]);
}
}
while(!q.isEmpty()) {
int qSize = q.size();
answer++;
for(int qs=0; qs<qSize; qs++) {
String cur = q.poll();
outer: for(int i=0; i<words.length; i++) {
if(check[i] == true) continue;
boolean flag = false;
for(int j=0; j<cur.length(); j++) {
if(cur.charAt(j) != words[i].charAt(j)) {
if(flag == true) continue outer;
flag = true;
}
}
if(flag==true) { // 1개가 바껴있다면
if(words[i].equals(target)) { // 정답이랑 같다면??
return answer;
}
check[i] = true;
q.offer(words[i]);
}
}
}
}
return 0;
}
}
소요시간: 40분
begin | target | words[] |
hit | cog | hot, dot, dog, lot, log, cog |
hit -> cog로 가는데
우선 begin과 words를 비교해서 문자 하나만 다른것들을 큐에 넣은 다음에
다음 로직에서는 큐사이즈만큼 반복하면서 큐에 값을 뽑고 갈 수 있는 단어가 있으면 큐에 넣고, target과 같으면 종료했다.
여기서 중복처리는 check[]을 이용해서 했는데 각 값에 대해서 1번이상 갈 일이 없으므로 하나만을 이용했다.
'알고리즘' 카테고리의 다른 글
[프로그래머스] 등굣길 - dp(lv3) (0) | 2021.01.07 |
---|---|
[프로그래머스] 정수삼각형 - dp(lv3) (0) | 2021.01.06 |
[프로그래머스] 소수 찾기 - 완전탐색(lv2) (0) | 2021.01.04 |
[프로그래머스] H-Index - 정렬(lv2) (2) | 2021.01.02 |
[프로그래머스] 가장 큰 수 - 정렬(lv2) (0) | 2020.12.30 |