프로그래머스 문자열 밀기

KIMYEONGJUN·약 23시간 전
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

내가 이 문제를 보고 생각해본 부분

main 메서드에서는 문자열 배열 A_arr과 B_arr에 테스트할 문자열 쌍을 저장한다.
반복문을 통해 각 쌍에 대해 solution 메서드를 호출하여 결과를 얻고, 그 결과를 출력한다.
solution 메서드는 두 문자열 A와 B를 받아, 문자열 A를 오른쪽으로 몇 번 밀면 B가 되는지를 계산한다.
우선 A와 B가 같으면 0을 반환한다. 밀지 않아도 되기 때문이다.
다음으로 문자열 길이만큼 반복하면서 마지막 문자를 잘라 맨 앞으로 옮기는 밀기 작업을 수행한다.
매 회전마다 밀린 문자열이 B와 같은지 비교하여 같으면 현재 밀기 횟수 i를 반환한다.
반복이 끝나도록 B가 되지 않으면 -1을 반환하여 불가능함을 뜻한다.

코드로 구현

class Solution {
    public int solution(String A, String B) {
        if (A.equals(B)) return 0;
        int length = A.length();
        String rotated = A;

        for (int i = 1; i < length; i++) {
            rotated = rotated.charAt(length - 1) + rotated.substring(0, length - 1);

            if (rotated.equals(B)) {
                return i;
            }
        }

        return -1;
    }
}

프로그래머스 코드

package programmers.programmers2;

// 프로그래머스 문자열 밀기
public class Main119 {
    public static void main(String[] args) {
        String[] A_arr = {"hello", "apple", "atat", "abc"};
        String[] B_arr = {"ohell", "elppa", "tata", "abc"};

        for (int i = 0; i < A_arr.length; i++) {
            int result = solution(A_arr[i], B_arr[i]);
            System.out.println(result);
        }
    }

    public static int solution(String A, String B) {
        if (A.equals(B)) return 0;
        int length = A.length();
        String rotated = A;

        for (int i = 1; i < length; i++) {
            rotated = rotated.charAt(length - 1) + rotated.substring(0, length - 1);

            if (rotated.equals(B)) {
                return i;
            }
        }

        return -1;
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글