
내가 생각했을때 문제에서 원하는부분
문자열 "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;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.