class Solution {
public int solution(String A, String B) {
int answer = -1;
char[] temp = new char[A.length()];
if(A.equals(B)) answer = 0;
else {
for(int i=1; i<A.length(); i++) {
for(int j=0; j<A.length(); j++) {
if(j+i < A.length()) temp[j+i] = A.charAt(j);
else temp[j+i - A.length()] = A.charAt(j);
}
if(String.valueOf(temp).equals(B)) {
answer = i;
break;
}
}
}
return answer;
}
}
나는 1번 밀고, 같지않으면 한번 더 밀고, .. 반복해서 결국 가능한 경우의수를 다 해보는 로직을 짰다.
다른 효율적인 풀이가 분명 있을 것이기에 다른 사람들은 어떻게 풀었는지 궁금해졌다.
배울만한 다른 코드를 가져와봤다.
class Solution {
public int solution(String A, String B) {
String tempB = B.repeat(2);
return tempB.indexOf(A);
}
}
제일 기발했던 코드...
2번 나열해준 후 indexOf()의 값을 그냥 바로 리턴하는것도!
찾을 수 없을경우 -1을 리턴하기때문이다.
class Solution {
public int solution(String A, String B) {
return (B+B).indexOf(A);
}
}
위와 동일한 로직이나 repeat() 메서드를 사용하지 않았다.
생각나지 않으면 작은수의 반복은 이런식으로 해도 괜찮을것같다.
lass Solution {
public int solution(String A, String B) {
int answer = -1;
String temp = A;
for(int i = 0 ; i < A.length() ; i++){
if(temp.equals(B)){
answer = i;
break;
}
temp = temp.charAt(A.length()-1) + temp.substring(0, A.length()-1);
}
return answer;
}
}
한번씩 누적해서 미루는것을 이런식으로 표현했다.
나는 이중 for문을 사용해서 인덱스가 조금 헷갈릴 수 있는데, 한 번씩 미룬다는것은 맨 뒤의 값을 맨 앞으로 가져오기때문에 맨 뒷값과 처음부터 맨뒤의 하나 전 값까지 이렇게 2개 덩어리로 나눠서 temp값을 업데이트해주며 B와 비교하는 반복문을 사용하면 조금 더 좋은 코드를 짤 수 있다.