새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/JavaScript

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

by 언호 2022. 5. 13.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 접근 및 이해

해당 조건을 만족하면서 재귀를 이용하여 완전탐색으로 접근하였습니다.

2) 알고리즘

  • 완전탐색
  • 재귀

3) 풀이 코드

사용 언어 - JavaScript

function solution(begin, target, words) {
  let answer = 1e10                         // 최솟값을 구해야하므로 초기에 가장 높은 값으로 초기화
  const N = words.length                    // 변환 가능한 단어의 개수
  const visited = Array(N).fill(false)      // 해당 단어로 변환을 했었는지 확인을 위함
  
  function sol(n, now, ans) {               // 남은 변환 가능 단어 개수, 현재 단어, 변경한 횟수
    if (now === target) {                   // 타겟과 단어가 같다면
      answer = Math.min(answer, ans)        // 현재까지 기록된 횟수와 비교하여 더 작은 값 저장
      return
    } else if (n === 0) {                   // 모든 단어를 탐색해봤다면 종료
      return
    }
    
    words.forEach((word, idx) => {
      let diff = Array.from(word).filter((v, idx) => v !== now[idx])    // 현재 단어와 변경 가능한 단어의 알파벳 비교하여 다른 갯수만큼 반환
      if (diff.length === 1 && !visited[idx]) {                         // 알파벳 다른 개수가 1개이고, 변환한적이 없다면
        visited[idx] = true                                             // 변환하여 다음 단어 탐색
        sol(n-1, word, ans+1)
        visited[idx] = false
      }
    })
  }
  
  sol(N, begin, 0)
  
  return answer === 1e10 ? 0 : answer       // 값이 변하지 않았다면, 가능한 경우가 없으므로 0 반환
}

🔗 문제 링크

- https://programmers.co.kr/learn/courses/30/lessons/43163?language=javascript 

 

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

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

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

댓글