개발에 AtoZ까지

[JAVA][D2] 2007. 패턴 마디의 길이 본문

코딩테스트 준비/SWEA

[JAVA][D2] 2007. 패턴 마디의 길이

AtoZ 개발자 2021. 1. 3. 18:32
반응형

※ 개인적으로 해당 문제는 모호한 경우가 있습니다.  풀이할때 마디의 최소값을 구했습니다.

더보기

테스트 케이스 

KOREAKOREAKOREAKOREAKOREAKOREA

인 경우 SWEA에서 제공한 답은 KOREA 패턴으로 하는 마디 5개이나,KOREAKOREA 이렇게 또한 패턴으로 볼수있기에 애매합니다.그래서 마디의 최소값인 경우로 풀이하였습니다.

문제 

패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라.


[제약 사항]

각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다.


[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 길이가 30인 문자열이 주어진다.


[출력]

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

예시

 

풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Solution {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		try {
			//테스트 개수
			int N = Integer.parseInt(br.readLine());
			for(int i=1;i<=N;i++) {
				String str = br.readLine();
				StringBuilder sb= new StringBuilder();
				int count=1;
				//초기값 설정
				sb.append(str.charAt(0));
				//sb에 담긴 글자와 str에서 sb에 담긴 글자 이후~sb길이만큼의 문자를 잘라 비교함
				//비교해서 같다면 패턴의 구간을 확인한 경우
				while(!sb.toString().equals(str.substring(sb.length(), sb.length()*2))) {
					sb.append(str.charAt(count));
					count++;
				}
				System.out.println("#"+i+" "+sb.length());
			}
			} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
반응형
Comments