문자열 밀기

nacSeo (낙서)·2024년 4월 8일
0

프로그래머스

목록 보기
143/169

문제 설명

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

제한사항

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

나의 코드

class Solution {
    public int solution(String A, String B) {
        int count = 0;
        for(int i=0; i<A.length(); i++) {
            if(A.equals(B)) {
                break;
            } else {
                A = A.substring(A.length()-1) + A.substring(0, A.length()-1);
                count++;
            }
        }
        return A.equals(B) ? count : -1;
    }
}

다른 사람 코드

class Solution {
    public int solution(String A, String B) {

        return (B+B).indexOf(A);
    }
}

느낀 점

문자열 A의 길이만큼 돌면서 AB와 같아질 때 break를 통해 반복문을 빠져나올 수 있도록 하였고, 그 전까지는 A의 마지막 문자를 잘라 앞에 넣어주고, 처음부터 마지막 문자 이전까지 문자열을 뒤에 붙여주면서 한 칸씩 밀어내고 count를 통해 몇 번 밀어냈는 지 파악해줬다. AB가 같아져서 반복문을 빠져나왔는지, 같지 않지만 A의 길이만큼 다 돌아서 반복문을 빠져나왔는지 알기 위해 마지막에 삼항연산자를 통해 원하는 결과를 리턴해줬다.
다른 사람 코드를 보고 충격적인 방법을 발견했다. B 문자열 두 개를 합친 후, indexOf()메서드를 사용하여 A와 같은 문자열이 나타나는 위치를 반환해주면 한 줄로 풀 수 있었다.. 어차피 해당 문자열이 없으면 -1을 반환하는 indexOf()메서드이기에 매우 편리한 방법이라고 생각이 든다. 성장해서 이런 창의적인 방법을 생각해낼 수 있는 개발자가 되고 싶다.

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글