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

2023. 11. 21. 19:52· 코테 준비/프로그래머스
목차
  1. 문제 설명
  2. 나의 풀이 

문제 설명

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

1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다.

2. words에 있는 단어로만 변환할 수 있습니다.

예를 들어 begin이 "hit", target가 "cog", words가 ["hot","dot","dog","lot","log","cog"]라면 "hit" -> "hot" -> "dot" -> "dog" -> "cog"와 같이 4단계를 거쳐 변환할 수 있습니다.

두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변환할 수 있는지 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 각 단어는 알파벳 소문자로만 이루어져 있습니다.
  • 각 단어의 길이는 3 이상 10 이하이며 모든 단어의 길이는 같습니다.
  • words에는 3개 이상 50개 이하의 단어가 있으며 중복되는 단어는 없습니다.
  • begin과 target은 같지 않습니다.
  • 변환할 수 없는 경우에는 0를 return 합니다.

입출력 예

begin target words return
"hit" "cog" ["hot", "dot", "dog", "lot", "log", "cog"] 4
"hit" "cog" ["hot", "dot", "dog", "lot", "log"] 0

입출력 예 설명

예제 #1
문제에 나온 예와 같습니다.

예제 #2
target인 "cog"는 words 안에 없기 때문에 변환할 수 없습니다.

 

나의 풀이 

function solution(begin, target, words) {
    var answer = 0;
    let visited = [];
    if (!words.includes(target)) {
        return answer;
    }
    
    function dfs ( word , plus){
        console.log(plus);
        if(word === target) {
            answer = plus;
            return;
        }
        if(plus > words.length){
            return 
        }
    for(let i =0 ; i<words.length ; i++ ){
        let count = 0;
        for(let j =0; j<begin.length ; j++){
            if(word[j]!==words[i][j]){
                count++;
            }
            if(count > 1){
                continue;
            }
        }
        if(count ===1){ //하나만 바뀐거
            if(!visited.includes(words[i])){
                visited.push(words[i]);
                dfs(words[i],plus+1);
                visited.pop();
            }
            }
    }
    }
    dfs(begin,0);
    return answer;
}
최소 변환 문제라 bfs로 풀어도 됐을 것 같긴한데 나는 dfs 를 선택했다. 
처음 words 에 target 단어가 존재하지 않는다면 dfs 함수를 실행하지 않고 바로 종료할 수 있도록 처음에 if 문을 작성해주었다. 
dfs 함수는 word 와 plus 를 인자로 갖는데 word는 words배열의 단어들이 들어갈 것이고 plus 는 변환횟수를 저장하는 변수이다. 
dfs 함수 내부 for 문에서는 단어의 차이를 판별하는데 각 단어는 한가지만 변환될 수 있기 때문에 count 변수를 추가하여 단어를 비교하며 변환된 횟수를 판별해 변환된 횟수가 1일경우에 방문했음을 표시하고 바뀐 단어로 다시 dfs 를 실행하게 하였다. 그 후 다시 방문표시를 없애주며 함수를 작성해보았다. 

아직 dfs/bfs 문제와 친하지가 않아 성능측면에서는 좋지 못하지만 다양하게 풀어보고 더 노력해봐야겠다. 

'코테 준비 > 프로그래머스' 카테고리의 다른 글

[프로그래머스]키패드 누르기 (javascript)  (1) 2024.09.11
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (javascript)  (0) 2024.05.04
프로그래머스 문제를 복사하면 배경까지 복사되네 .. ? 해결방안은 ?  (1) 2023.11.17
[프로그래머스] 전령망을 둘로 나누기  (0) 2023.11.17
[프로그래머스] 완전탐색 - 소수 찾기 (javascript)  (0) 2023.11.15
  1. 문제 설명
  2. 나의 풀이 
'코테 준비/프로그래머스' 카테고리의 다른 글
  • [프로그래머스]키패드 누르기 (javascript)
  • [프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (javascript)
  • 프로그래머스 문제를 복사하면 배경까지 복사되네 .. ? 해결방안은 ?
  • [프로그래머스] 전령망을 둘로 나누기
배트리버
배트리버
🐾 사람 좋아, 개발 좋아 🐾 궁금한 건 끝까지 파고들고, 배운 건 즐겁게 나누는 개발자의 놀이터
배트리버
리트리버의 개발 놀이터
배트리버
전체
오늘
어제
  • 분류 전체보기
    • 네트워크
    • 기초 셋팅
    • 오늘의 일기
    • 리액트
    • 코테 준비
      • 프로그래머스
      • 백준
    • 코드스테이츠44기 프론트엔드
    • HTML-CSS-JavaScript
      • HTML
      • CSS
      • JavaScript
    • 자료구조&알고리즘
    • TypeScript
    • Git
    • Tip
    • 프로젝트
    • Next.js
    • 트러블슈팅

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • BFS
  • 코드스테이츠 프론트엔드
  • 티스토리챌린지
  • 네트워크
  • 코드스테이츠
  • 코드스테이츠 회고록
  • 오블완
  • 프로그래머스
  • 프로젝트 회고
  • 자바스크립트 비동기
  • KPT 회고
  • 타입스크립트문법
  • 탄스택쿼리
  • 코드스테이츠 44기
  • 리액트
  • 코드스테이츠 44기 프론트엔드
  • 리액트 상태관리
  • 리액트쿼리
  • 자바스크립트
  • 코드스테이츠 블로깅

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
배트리버
[프로그래머스] 단어변환 (javascript)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.