Java
Java 회전된 문자열인지 확인하기
완기
2022. 1. 30. 15:44
728x90
반응형
회전된 문자열은 string이란 문자열이 있을 때,
string이란 문자열의 요소를 회전시켰을 때,
ingstr
다음과 같은 문자열을 만들 수 있냐? 이런 문제다.
위 ingstr은 str이 우측으로 가면 되기 때문에 만들 수 있는 문자열이다.
이 처럼 특정 값을 회전시켰을 때, 값을 만들 수 있는지 판별하는 코드이다.
public class Main {
public static void main(String[] args) {
String s = "string"; //원본 문자열
String cycled = "ingstr"; //타겟 문자열
System.out.println(isCycled(s, cycled));
}
public static boolean isCycled(String origin, String target) {
return origin.length() == target.length() && target.repeat(2).contains(origin);
}
}
300x250
코드는 상당히 간단하다.
두 문자열의 문자열 길이가 같고, 바뀐 문자열을 2번 더한 값에 원래 문자열이 포함된 지 보면 된다.
ingstringstr
이 처럼, 두 번 더하면 원래 문자열이 포함된다.
또 한가지의 예시로 배열을 회전시켰을 때도 마찬가지다.
int[] origin = {2, 4, 5, 9, 10}; //원본
int[] target = {5, 9, 10, 2, 4}; //회전
위처럼 회전된 배열이 있을 때,
나는 toString으로 비교했다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] origin = {2, 4, 5, 9, 10}; //원본
int[] target = {5, 9, 10, 2, 4}; //회전
System.out.println(isCycled(origin, target));
}
public static boolean isCycled(int[] origin, int[] target) {
String originValue = Arrays.toString(origin).replaceAll(" ", "");
String targetValue = Arrays.toString(target).replaceAll(" ", "");
String originToString = originValue.substring(1, originValue.length() - 1);
String targetToString = targetValue.substring(1, targetValue.length() - 1) + "," + targetValue.substring(1, targetValue.length() - 1);
System.out.println("originValue = " + originValue);
System.out.println("targetValue = " + targetValue);
System.out.println("to String original = " + originToString);
System.out.println("to String targetToString = " + targetToString);
return origin.length == target.length && targetToString.contains(originToString);
}
}
정규 표현식을 사용하면 더 간결하게 풀 수 있다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] origin = {2, 4, 5, 9, 10}; //원본
int[] target = {5, 9, 10, 2, 4}; //회전
System.out.println(isCycled(origin, target));
}
public static boolean isCycled(int[] origin, int[] target) {
String originValue = Arrays.toString(origin).replaceAll("[\\[\\]\\s]", "");
String targetValue = Arrays.toString(target).replaceAll("[\\[\\]\\s]", "") + "," + Arrays.toString(target).replaceAll("[\\[\\]\\s]", "");
System.out.println("originValue = " + originValue);
System.out.println("targetValue = " + targetValue);
return origin.length == target.length && targetValue.contains(originValue);
}
}
728x90
728x90