새벽코딩

[SWEA] [15758] 무한 문자열 본문

알고리즘

[SWEA] [15758] 무한 문자열

J 코딩 2023. 3. 14. 08:42
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&problemLevel=4&contestProbId=AYP5JmsqcngDFATW&categoryId=AYP5JmsqcngDFATW&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=4&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


※ JAVA 코드 (무한 문자열)

import java.util.*;
import java.io.*;

class Solution
{
	public static void main(String args[]) throws Exception, IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
        
		int T;
		T = Integer.parseInt(br.readLine());
		
		// 두개의 문자열을 담을 배열
		String[] input = new String[2];
        
		for(int test_case = 1; test_case <= T; test_case++)
		{
			// input
			st = new StringTokenizer(br.readLine());
			
			input[0] = st.nextToken();
			input[1] = st.nextToken();
			
			// 두 문자열의 각 길이
			int sLen = input[0].length();
			int tLen = input[1].length();
			boolean chk = true;
			
			// 만약 길이가 같다면 그냥 비교
			if(sLen == tLen) {
				for(int i = 0; i < sLen; i++) {
					if(input[0].charAt(i) != input[1].charAt(i)) {
						chk = false;
						break;
					}
				}
			} 
			// 만약 길이가 다르다면 두 값을 곱한수 (사실 줄일 수 있다)
			else {
				String tmp1 = "";
				String tmp2 = "";
				
				for(int i = 0; i < tLen; i++) {
					tmp1 += input[0];
				}
				
				for(int i = 0; i < sLen; i++) {
					tmp2 += input[1];
				}
				
				if(tmp1.equals(tmp2) == false) {
					chk = false;
				}
			}
			
			System.out.print("#" + test_case + " ");
            
			if(chk == true) {
				System.out.println("yes");
			} else {
				System.out.println("no");
			}
		}
	}
}

※ 생각정리 (무한 문자열)

SW Expert Academy 문제는 이전에는 많이 풀어봤었지만 블로그에 담기는 처음이네요. 우선, 문제가 무단 복사가 안된다고 하니 링크를 참고해서 문제를 풀어봅시다.

먼저, 문제를 설명하자면 길이가 50으로 제한되는 임의의 두 문자열이 무한 문자열일때 같은지 아닌지를 판별하는 문제이다. 두 문자열의 무한 문자열이 같은지 판별하는 방법을 다음과 같이 생각해보았다.

1. 두 문자열의 길이가 같을때 - 두 문자열이 완벽히 동일해야한다.

2. 두 문자열의 길이가 다를때 - 두 문자열 길이의 최소 공배수가 될때까지 반복했을때 두개의 문자열이 동일해야한다.

2번 조건에 대해서는 사실 두 수의 최대공배수를 구하여 문제를 풀 수 있었지만 문자열의 길이가 최대로 길어져도 2500자정도가 나올 수 있기때문에 그냥 서로 다른 문자열의 길이만큼 곱(반복)해 더하였다.

3. 최종적으로는 두문자열이 동일한지 equal 체크해준다.

 

-새벽코딩-

반응형
Comments