[프로그래머스]Level0. 문자열 밀기

Benjamin·2023년 2월 24일
0

프로그래머스

목록 보기
30/58

내 코드

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번 밀고, 같지않으면 한번 더 밀고, .. 반복해서 결국 가능한 경우의수를 다 해보는 로직을 짰다.

다른 효율적인 풀이가 분명 있을 것이기에 다른 사람들은 어떻게 풀었는지 궁금해졌다.
배울만한 다른 코드를 가져와봤다.

다른 코드 1

class Solution {
    public int solution(String A, String B) {
        String tempB = B.repeat(2);
        return tempB.indexOf(A);
    }
}
  • repeat() : 반복나열해주는 메서드. 파라미터 횟수대로 나열해줌

제일 기발했던 코드...
2번 나열해준 후 indexOf()의 값을 그냥 바로 리턴하는것도!
찾을 수 없을경우 -1을 리턴하기때문이다.

다른 코드 2

class Solution {
    public int solution(String A, String B) {

        return (B+B).indexOf(A);
    }
}

위와 동일한 로직이나 repeat() 메서드를 사용하지 않았다.
생각나지 않으면 작은수의 반복은 이런식으로 해도 괜찮을것같다.

다른 코드 3

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와 비교하는 반복문을 사용하면 조금 더 좋은 코드를 짤 수 있다.

공부한 사항

  • String.vlaueOf(charArr) : char 배열을 문자열로 변환
  • repeat(int i) : i번만큼 반복 나열해주는 메서드

0개의 댓글