코드트리 방학 조별과제-문자열 비교 / 미는 횟수

onebbu·2024년 7월 31일
0
post-custom-banner

문제

문자열을 오른쪽으로 한칸씩 밀었을 때 문자열 A와 B가 같아지는 최솟값 출력

내 풀이방법

  1. 입력값을 받아 while문을 돌림
  2. while문 내에서는 입력받은 문자열을 substring 함수를 이용해 한칸씩 밀면서 count 변수를 1씩 증가
  3. 문자열 A(우측으로 한칸씩 민 문자열)과 문자열 B가 같다면 count 리턴
  4. count변수를 이용하여 문자열의 길이보다 count수가 커진다면 -1리턴

내 코드

import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        String str2 = sc.next();
        int count = 0;
        boolean flag = true;
        while (flag) {
            str2 = str2.substring(1, str2.length()) + str2.substring(0, 1);
            count++;
            if(str1.equals(str2)){
                flag = false;
            }
            if(count >= str1.length()){
                count = -1;
                flag = false;
            }
        }
        System.out.println(count);
    }

}

모범코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 문자열을 입력받습니다.
        String a = sc.next();
        String b = sc.next();

        int len = a.length();
        int cnt = 0;
	
        // 문자열 a를 우측으로 한 칸씩 밀어보면서 문자열 b와 같아지는지 확인합니다.
        for(int i = 0; i < len; i++) {
            // 문자열을 오른쪽으로 한 칸 쉬프트합니다.
            a = a.substring(len - 1, len) + a.substring(0, len - 1);

            cnt++;
            
            // 문자열이 같을 경우 민 횟수를 출력합니다.
            if(a.equals(b)) {
                System.out.println(cnt);
                break;
            }

            // 만약 불가능하다면 -1을 출력합니다.
            if(i == len - 1)
                System.out.println(-1);
        }
    }
}
profile
기록하는 습관
post-custom-banner

0개의 댓글