Javascript - 문자열 밀기

이율곡·2023년 7월 16일

Programmers

목록 보기
33/44
post-thumbnail

문자열 밀기

문제

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

입출력 예

ABresult
"hello""ohell"1
"apple""elppa"-1
"atat""tata"1
"abc""abc"0

접근방법

이 문제의 핵심은 문자열을 오른쪽으로 한 칸씩 밀어서 주어진 두 문자열이 같아지는 최소 횟수를 찾는 것이다.

  1. 문자열 A를 여러 번 밀어서 B가 될 수 있는지 확인.
  2. 문자열 A를 한 번씩 밀어서 생성된 새로운 문자열이 B와 같은지 확인.
  3. 만약 같다면 밀어야 하는 횟수를 반환하고, 그렇지 않다면 계속해서 문자열 A를 밀어 새로운 문자열을 생성.

풀이

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

코드를 풀이하면 우선 A랑 B가 같은 경우를 파악한다. 그리고 다른 경우는 반복문을 통해 A를 오른쪽으로 한 칸씩 밀어 새로운 문자열을 생성한다. 그리고 반복문이 끝날 때까지 A와 B가 같은지를 체크하지 못하면 -1를 반환한다.


정리하기

이번에는 문자열을 조작하는 걸 중심으로 문제를 해결했다. 늘 풀면서 느끼는 점은 핵심, 요구사항 등을 파악하면 나머지는 쉽게 다가갈 수 있다. 그러니 늘 핵심을 파악하는 습관을 갖자.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글