문제 설명
문자열 "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를 이용하여 반복문을 빠져나옵니다.
'프로그래머스 > Lv. 0(코딩테스트 입문)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 등수 매기기(Java) (0) | 2023.07.06 |
---|---|
[프로그래머스 코딩테스트] 구슬을 나누는 경우의 수(Java) (0) | 2023.07.01 |
[프로그래머스 코딩테스트] 유한소수 판별하기(Java) (0) | 2023.06.24 |
[프로그래머스 코딩테스트] 진료 순서 정하기(Java) (0) | 2023.06.12 |
[프로그래머스 코딩테스트] 직사각형 넓이 구하기(Java) (0) | 2023.06.10 |