[프로그래머스] 단어 변환 - JS

잡초·2024년 4월 3일
0
post-thumbnail

문제

풀이

function solution(begin, target, words) {
  // 방문한 단어와 시작 단어의 거리를 저장할 객체를 초기화
  const visited = { [begin]: 0 };
  // BFS를 위한 큐를 초기화하고 시작 단어를 삽입
  const queue = [begin];

  // 큐가 비어있을 때까지 반복
  while (queue.length) {
    // 큐에서 현재 단어를 꺼냄
    const cur = queue.shift();
    
    // 현재 단어가 목표 단어와 같다면 반복을 종료
    if (cur === target) break;

    // 주어진 단어들을 순회
    for (const word of words) {
      // 현재 단어와 주어진 단어가 연결되어 있는지 확인하고, 방문한 적이 없다면
      if (isConnected(word, cur) && !visited[word]) {
        // 방문한 단어를 표시하고, 거리를 갱신
        visited[word] = visited[cur] + 1;
        // 다음으로 방문할 단어를 큐에 추가
        queue.push(word);
      }
    }
  }
  
  // 목표 단어까지의 거리가 있는 경우 해당 거리를 반환하고, 없는 경우 0을 반환
  return visited[target] ? visited[target] : 0;
}

// 두 단어가 한 글자만 차이나는지 확인하는 함수
const isConnected = (str1, str2) => {
  let count = 0;
  const len = str1.length;
  
  for (let i = 0; i < len; i++) {
    if (str1[i] !== str2[i]) count++;
  }
  
  // 한 글자만 차이나면 true를 반환하고, 그렇지 않으면 false를 반환
  return count === 1 ? true : false;
}
profile
개발자가 되고싶은 잡초

0개의 댓글