Algorithm/BOJ

[BOJ - Silver V] 무한 문자열 / ⭕

cks._.hong 2024. 8. 17. 12:01

무한 문자열

 

1. 제출 코드 (27분 55초 / 구현)

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        String t = br.readLine();
        int answer = 1;
        String ts = s.concat(s);
        String tt = t.concat(t);

        if(ts.length() > tt.length()) {
            for(int i = 0; i < ts.length(); i++) {
                if(ts.charAt(i) != tt.charAt(i % tt.length())){
                    answer = 0;
                    break;
                }
            }
        } else {
            for(int i = 0; i < tt.length(); i++) {
                if(tt.charAt(i) != ts.charAt(i % ts.length())){
                    answer = 0;
                    break;
                }
            }
        }
        System.out.println(answer);
    }
}

 

2. 구현 로직

문자열이 무한대로 이어지기 때문에 각 문자열당 한 번씩만 이어 붙이고 둘의 문자를 비교하면 정답을 추출할 수 있다고 생각했다.

  1. concat을 이용하여 각 문자열을 한 번씩 이어 붙인다.
  2. ts와 tt의 길이를 비교해서 긴 문자열을 기준으로 반복문을 수행한다.
  3. 짧은 길이의 문자열의 경우 최대 길이를 넘어간다면 % 연산자를 이용하여 처음부터 다시 비교하도록 했다.

3. 유의할 점

  • 실버 5 문제임에도 불구하고 생각보다 고려해야 할 것이 많아 시간이 꽤 오래걸렸다.
  • 최대한 반례를 생각하고 풀어보면 좋을 거 같다.