자료구조 및 알고리즘/JavaScript Practice

JS Practice) 프로그래머스 : 문자열 밀기

Ryomi 2023. 4. 13. 09:43
728x90
반응형

 

 

문자열 밀기 

문제설명 :

문자열 "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

 

접근

: 단순하게 접근했다. A문자열의 마지막 알파벳을 맨 앞으로 두기 위해  A을 배열로 만들어 pop()과 unshift()를 사용했다. count의 값이 A의 마지막 인덱스와 같을 때 까지 while문을 돌리며 A의 문자 순서를 바꿔 한바퀴 돌렸다. 배열 메서드를 사용해 문자의 순서를 바꾼 후 배열을 요소를 합쳐 B와 같은지를 확인하였다. 맞으면 count에 +1을 더해주었고 한 바퀴를 돌려도 맞지 않으면 -1을 반환했다. 처음엔 에러를 반환했다. 이유는 처음부터 A와 B가 같은 경우가 있기 때문이었다. 그래서 if문을 사용해 해당 부분에 대한 처리를 해주었다.  

function solution(A, B) {
    if(A === B) return 0
    
    A = A.split('')
    let count = 0
    
    while(count !== A.length - 1){
        A.unshift(A.pop())
        if(A.join('') === B) return count+1
        count++
    }
    return -1
}

 

 

solution

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

// 와.... 이걸 이렇게 푸네... 공부해야겠다.

728x90
반응형