문자열 쉬프트
JAVA 문제중 입력값 String_A와 String_B를 비교하여, String_B가 String_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
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java / 자바의 정석 / Java 기초] Stream 사용하기 (0) | 2024.01.18 |
---|---|
[Java / 자바의 정석 / Java 기초] 문자열 쉬프트하기 (0) | 2024.01.11 |
[Java / 자바 기초 / 자바의 정석] -와 +가 쌍으로 이루어진 값의 최대값 출력 (1) | 2024.01.05 |
[Java/자바/자바의 정석] 정규표현식을 활용한 비밀번호 허용 여부 체크하는 법 (1) | 2023.12.30 |
[내가 이해하기 위한 용어정리] Restfull API란? (1) | 2023.12.26 |