[Java] SWEA 17319번: 문자열문자열

U·2023년 7월 31일

SWEA

목록 보기
5/10

문제

재현이는 알파벳 소문자로 이루어진 문자열 하나를 받아 그대로 두 번 연달아 썼다. 예를 들어 “abc” 를 받았다면 “abcabc” 를 썼다.

당신에게 문자열이 주어질 때, 이 문자열이 재현이가 만들어 낼 수 있는 문자열인지 판단하라.

[입력]

첫 번째 줄에 테스트 케이스의 수 TC가 주어진다. 이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다. 각 테스트 케이스는 다음과 같이 구성되었다.

  • 첫 번째 줄에 문자열의 길이 N이 주어진다. (1≤N≤100)

  • 다음 줄에 길이 N의 알파벳 소문자 문자열 S가 주어진다.

[출력]

각 테스트 케이스 마다 한 줄씩, 재현이가 만드는 게 가능한 문자열이라면 “Yes”, 불가능한 문자열이라면 “No” 를 출력하라.


일단 생각하기!

  • 문자열의 길이가 홀수일 경우 문자열을 2번 연속 쓴다는 조건에 벗어나므로 먼저 문자열의 길이가 홀수인지 짝수인지 판별
  • 짝수일 경우 -> 문자열을 2번 연속으로 썼는지 확인
    - for문을 돌려 0부터 N / 2까지 harAt(i) == charAt(i + N / 2) 비교

풀이

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

public class Solution {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int test_case = Integer.parseInt(br.readLine());
		
		for (int i = 1; i <= test_case; i++) {
			int N = Integer.parseInt(br.readLine());
			String str = br.readLine();
			
			boolean isSame = false;
			
			if (N % 2 == 0) {
				for (int j = 0; j <  N / 2; j++) {
					if (str.charAt(j) == str.charAt(j +  N / 2)) {
						isSame = true;
					}
					else {
						isSame = false;
						break;
					}
				}
			}
			else {
				isSame = false;
			}
			
			if (isSame) {
				System.out.println("#" + i + " " + "Yes");
			}
			else if(!isSame) {
				System.out.println("#" + i + " " + "No");
			}
		}
	}
}
profile
백엔드 개발자 연습생

1개의 댓글

comment-user-thumbnail
2023년 7월 31일

유익한 글이었습니다.

답글 달기