코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(begin, target, words) {
//words에 target이 없으면 0 리턴
if (words.indexOf(target) == -1) return 0;
//bfs?를 위해 만든 큐
let queue = new Array();
//나중에 글자 비교를 위해 target을 문자열 배열로 만들기
target = target.split("");
//words의 문자들도 문자열 배열로 각각 만들어 담기
for (i = 0; i < words.length; i++) {
words[i] = words[i].split("");
}
//큐에 begin 글자와 변형된 횟수인 0을 매개변수로 Word형으로 만들어 담는다
queue.push(new Word(begin.split(""), 0));
//큐가 0이 될 때까지 반복
while (queue.length > 0) {
//큐의 제일 첫번째 항목 가져오기
let word = queue.shift();
//항목의 글자와 변형 횟수 가져오기
let arr = word.w;
let index = word.index;
//만약 글자가 target과 동일하다면 바로 해당 횟수 리턴
if (check(arr, target) == 0) return index;
//words의 문자들을 하나씩 꺼내면서 글자와 비교
for (i = 0; i < words.length; i++) {
let count = words[i].length;
for (j = 0; j < words[i].length; j++) {
if (arr[j] == words[i][j]) count--;
}
//만약 글자 차이가 1개 밖에 없으면 큐에 넣으면서 words에서는 삭제
if (count == 1) {
queue.push(new Word(words[i], index+1));
words.splice(i, 1);
}
}
}
//while문이 끝나면 변형할 수 없는 것이기 때문에 0 리턴
return 0;
}
function check(w1, w2) {
let count = w1.length;
for (i = 0; i < w1.length; i++) {
if (w1[i] == w2[i]) count--;
}
return count;
}
class Word {
constructor(word, i) {
this.w = word;
this.index = i;
}
}
테스트 1 〉 | 통과 (0.33ms, 30.1MB) |
테스트 2 〉 | 통과 (0.40ms, 30.2MB) |
테스트 3 〉 | 통과 (0.57ms, 30MB) |
테스트 4 〉 | 통과 (0.20ms, 30.3MB) |
테스트 5 〉 | 통과 (0.10ms, 30.1MB) |
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프론트엔드/과제테스트] 쇼핑몰 SPA 기출 문제 해설 총 정리 (0) | 2022.08.24 |
---|---|
[프론트엔드/과제테스트] 고양이 사진첩 애플리케이션 기출 문제 해설 총 정리 (0) | 2022.08.18 |
[Java] 프로그래머스 - 단어 변환 (3단계) (0) | 2022.08.01 |
[Java] 프로그래머스 - 사칙연산 (4단계) (0) | 2022.08.01 |
[JavaScript] 프로그래머스 - 신고 결과 받기 (1단계) (0) | 2022.07.28 |