프로그래머스/Lv. 0(코딩테스트 입문)

[프로그래머스 코딩테스트] 문자열 밀기(Java)

Sigfriede 2023. 6. 25. 01:00

  문제 설명

  문자열 "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
import java.lang.StringBuilder;
class Solution {
    public int solution(String A, String B) {
        int answer = -1;
        if (A.equals(B)) {
            answer = 0;
        }
        for (int i = 0; i < A.length(); i++) {
            StringBuilder sb = new StringBuilder();
            for (int j = A.length() - i; j < A.length(); j++) {
                sb.append(A.charAt(j));
            }
            for (int j = 0; j < A.length() - i; j++) {
                sb.append(A.charAt(j));
            }
            if (sb.toString().equals(B)) {
                answer = i;
                break;
            }
        }
        return answer;
    }
}

  answer를 -1로 초기화합니다.

  첫 번째 if문에서 equals 메소드를 이용하여 문자열 A가 문자열 B와 같다면 answer에 0을 할당합니다.

  첫 번째 for문은 A의 길이만큼 순회합니다. 이를 이용하여 문자열을 몇 번 밀었는지 확인합니다.

  StringBuilder를 생성합니다. StringBuilder에 문자열 A를 민 문자열을 담을 것입니다.

  두 번째 for문이 A의 길이에서 i를 뺀 만큼에서부터, j가 A의 길이보다 작은 동안 순회합니다.

  append 메소드를 이용하여 StringBuilder에 A의 j번째 문자를 추가합니다. 이는 뒤에 있는 문자를 앞으로 당겨오는 역할을 합니다.

  세 번째 for문이 A의 길이에서 i를 뺀 만큼 순회합니다.

  append 메소드를 이용하여 StringBuilder에 A의 j번째 문자를 추가합니다. 이는 앞으로 당겨온 문자열에 이어서 원래 문자열(당겨온 부분을 제외하고)을 붙이는 역할을 합니다.

  두 번째 if문은 equals 메소드를 이용하여 민 문자열이 문자열 B와 같은지 확인합니다. 같다면 answer에 i를 할당하여 몇 번 밀었는지 반환합니다. 최소 횟수를 구하는 것이므로 break를 이용하여 반복문을 빠져나옵니다.