프로그래머스 / Javascript - 문자열 밀기

해다·2022년 11월 9일
0

알고리즘

목록 보기
2/8

👾 문자열 밀기

문제 링크

📑 문제

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 몇 번 밀어야 하는지 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

⛔ 제한사항

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.

❓고려했던 점

  • 처음 풀었을 때 테스트케이스 3번에서 실패했는데 이유는 A와 B가 같은 경우를 고려하지 않았어서. 그 부분을 추가했더니 바로 통과!
  • unshift(): 배열에 새로운 요소를 추가하는 함수,
    배열의 맨 뒤에 요소를 추가하는 push()와는 다르게 맨 앞에 요소를 새롭게 추가한다.
const nums = [4,5,6];
nums.unshift(1,2,3); // 배열 맨 앞에 1,2,3 을 추가한다.

console.log(nums); // [1,2,3,4,5,6]

nums.push(7,8,9); // 배열 맨 뒤에 7,8,9 를 추가한다.

console.log(nums); // [1,2,3,4,5,6,7,8,9]

  • splice(): 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다. 원본 배열이 변경되지 않는 slice()와는 달리 splice()는 원본 배열에 변경이 생긴다는 점을 기억하자!
const nums = [-4, -1, 0, 3, 10];

// 배열의 0번째부터 2번째까지를 잘라서 반환한다.
let numsSlice = num.slice(0,3); 
console.log(numsSlice); // [-4, -1, 0]
console.log(nums); // [-4, -1, 0, 3, 10]

// 배열에서 마지막 3개의 요소를 반환한다.
let numsSplice = nums.splice(-3);
console.log(numsScplie); // [0, 3, 10]
console.log(nums); // [-4, -1]


💡내 풀이

function solution(A, B) {
    // 1. 처음부터 A와 B가 같다면 문자열을 한 번도 밀지 않은 경우이므로 0을 반환한다.
    if(A===B) return 0;

    let total = 0;
    let arr = A.split("");
    
    for (let i = arr.length-1; i >= 0; i-- ){
        // 2. A의 마지막 문자를 잘라서 tmp에 넣는다.
        let tmp = arr.splice(arr.length-1, 1)[0]
        
        // 3. tmp를 arr의 맨 앞쪽에 추가한다. (unshift() 사용)
        arr.unshift(tmp);
        
        // 4. 문자열을 한 번 밀었으므로 total 값을 증가시킨다.
        total++
        
        // 5. 문자열을 민 값이 B와 일치한다면 민 횟수(total)를 반환한다.
        if(arr.join("") === B) return total;
    }
    return -1;
}

🔗참고링크

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/push
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

profile
잘하는 건 아닌데 포기하진 않을거야

0개의 댓글