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
'Java' 카테고리의 다른 글
Java]메서드 오버로딩말고 파라미터를 여러개 받아보자. (0) | 2022.02.23 |
---|---|
JAVA]배열,ArrayList,List 스트림 정렬 및 타입 변환 방법 정리 (0) | 2022.02.19 |
Log4j 보안 이슈 (0) | 2021.12.13 |
spring,java]JPA를 이용한 API서버 (0) | 2021.11.30 |
spring,java]스프링 Quartz 스케줄러 사용하기(배치) (0) | 2021.08.18 |
댓글