본문 바로가기
프로그래밍/Java

[Java / Java의 정석 / 자바 기초] 문자열을 쉬프트 하기(+쉬프트한 문자열 비교하기)

by Mr.noobiest 2024. 1. 9.

java

 

문자열 쉬프트


JAVA 문제중 입력값 String_AString_B를 비교하여, String_BString_A쉬프트했을때의 모양인지 여부를 확인하는 코드 이다.

예를들어 String_A="abc"라면 String_A를 쉬프트한 값은  "abc" / "bca" / "cab" 가  가능할 것이다.
이때 String_B = "bca"라면 True  "cba" 라면 False를  return한다.

 


 

코드



코드는 간단하다, 입력값 String_A를 String_A의 길이만큼 1번씩 좌로 쉬프트하는데, s.charAt(s.length()-1) + s.substring(0,s.length()-1);

쉬프트 도중 String_A의 값이 String_B와 같을때, True를 return하고 Break하는 코드다.

 

public class String_Shift {
    //시프트 하는 함수
    public static String shift(String s) {
        //문자열 우로 1칸 쉬프트
        //charAt(index번호) -> 문자열의 해당 인덱스 부분의 문자만 가져오기
        //substring(start index,end index) start~end까지의 문자열 가져오기
        return s.charAt(s.length()-1)+s.substring(0, s.length()-1);
        //맨끝 + 맨처음~맨끝 이전 문자열들
    }
    private static boolean solve(String a, String b) {
        boolean result = false;
        // 구현 할 위치
        //1.문자열 시프트가 필요한지 여부 확인(a와 b내용이 동일하면 시프트할 필요가 없음
        if(a.equals(b)) {
            result = true;
            return result;
        }
        //2.초기값이 동일하지 않을경우 문자열 시프트 실행
        else {
            for(int i =0;i<a.length(); i++) {
                System.out.println(a);

                a = shift(a);
                if(a.equals(b)) {
                    //시프트한 값과 비교값 b가 동일할경우 true반환후 for문 종료
                    result=true;
                    break;
                    //아닐경우 return을 false로 유지
                }result=false;                    
            }
        }
        //a.lenght()만큼 실행했음에도 return=false일 경우 false return 
        //시프트 실행중 시프트값과 비교군이 동일할 경우 true return
        return result;
    }

    public static void main(String[] args) {
        System.out.println(solve("abc", "bca") == true);
        System.out.println("============================");
        System.out.println(solve("abcd", "abcd" ) == true );
        System.out.println("============================");
        System.out.println(solve("abcde", "abced" ) == false );
        System.out.println("============================");
        System.out.println(solve("abcdef", "abfcde" ) == true );



    }
}

 

실행결과

abc
cab
true
============================
true
============================
abcde
eabcd
deabc
cdeab
bcdea
true
============================
abcdef
fabcde
efabcd
defabc
cdefab
bcdefa
false​


쉬프트하는 방법은 여러가지이지만, String_B와 동일한지 여부를 확인하여야 하기때문에, 이렇게 하는것이 간단하다.

끝.

728x90
반응형