본문 바로가기
Algorithms/코테 문풀

[프로그래머스] 문자열 밀기 - JavaScript

by hi-rachel 2023. 1. 14.

✏️  문제 설명

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


제한사항

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

입출력 예

 

A B result
"hello" "ohell" 1
"apple" "elppa" -1
"atat" "tata" 1
"abc" "abc" 0

입출력 예 설명

입출력 예 #1

  • "hello"를 오른쪽으로 한 칸 밀면 "ohell"가 됩니다.

입출력 예 #2

  • "apple"은 몇 번을 밀어도 "elppa"가 될 수 없습니다.

입출력 예 #3

  • "atat"는 오른쪽으로 한 칸, 세 칸을 밀면 "tata"가 되므로 최소 횟수인 1을 반환합니다.

입출력 예 #4

  • "abc"는 밀지 않아도 "abc"이므로 0을 반환합니다.

 

 


 

✏️  문제 풀이

function solution(A, B) {
    let arr = [...A];
    if (A === B) {
        return 0;
    }
    for(let i = 0; i < arr.length; i++) {
            arr.unshift(arr.pop())
            if (arr.join('') === B) {
                return i + 1;
            }
        }
    return -1;
}

한 글자씩 미는 방법은 A를 복사한 arr.unshift(arr.pop())으로 뒤에서 하나씩 뺀걸 바로 앞으로 넣어주면 된다.

 

- 다른 풀이

let solution=(a,b)=>(b+b).indexOf(a)

발상 대단하다 👍🏻

b를 2번 합쳤을 때 a가 있으면 a의 index를 반환, 못 찾으면 indexOf는 -1 반환

 

 

참고 사이트

프로그래머스

문자열 밀기(Javascript)

 

 

🙂 공부하면서 적는 글입니다. 피드백과 공감 환영합니다.