문제 설명

어떤 문자열을 둘로 나누고, 두 부분 문자열의 순서를 바꾸는 것을 문자열을 회전시킨다고 정의합니다.

예를 들면 "HelloWorld"라는 문자열을 "Hello", "World"의 두 부분 문자열로 나누너 회전시키면 "WorldHello"라는 문자열이 됩니다.

S1과 S2 두 가지 문자열이 주어졌을 때 S2가 S1을 회전시켜 나온 결과인지 판단하여, 회전에 의한 결과라면 1, 아니라면 0을 반환하는 프로그램을 구현하세요.


입력 형식

· S1, S2 : 문자열


출력 형식

· S2가 S1을 회전시킨 결과인지 여부를 정수(1 또는 0)로 반환


제약 사항

· 0 < S1.length, S2.length <= 1000


입출력 예시

· 입력

  · S1 = "HelloWorld"

  · S2 = "WorldHello"

· 출력 : 1

· 설명 : S1을 Hello와 World로 나누어 회전시키면 S2가 된다.


작성 코드

class Solution243 {
    public int solution(String S1, String S2) {
        if (S1.length() != S2.length()) {
            return 0; // 길이가 다르면 회전시켰을 때 같은 문자열이 될 수 없음
        }
        String S1S1 = S1 + S1;
        return S1S1.contains(S2) ? 1 : 0; // S1S1에 S2가 포함되어 있는지 확인하여 결과 반환
    }

    public static void main(String[] args) {
        Solution243 st = new Solution243();
        String S1 = "HelloWorld";
        String S2 = "WorldHello";
        System.out.println(st.solution(S1, S2));
    }
}

/*
위의 코드에서 contains 메서드는 문자열이 포함되어 있는지 여부를 확인하는 메서드이다.
만약 문자열 S2가 문자열 S1을 회전시켜서 만들어진 문자열이라면 contains 메서드가 true를 반환하고,
그렇지 않으면 false를 반환한다. 마지막으로 삼항 연산자를 사용하여 true인 경우 1을 반환하고, 
false인 경우 0을 반환한다.
 */

 

정답 코드

class Solution {
    public int solution(String S1, String S2) {
        S1 = S1 + S1;

        if (S1.indexOf(S2) == -1) {
            return 0;
        } else {
            return 1;
        }
    }

    public static void main(String[] args) {
        Solution st = new Solution();
        String S1 = "HelloWorld";
        String S2 = "WorldHello";
        System.out.println(st.solution(S1, S2));
    }
}