[백준 2866] 문자열 잘라내기(Java)

최민길(Gale)·2023년 12월 3일
1

알고리즘

목록 보기
161/172

문제 링크 : https://www.acmicpc.net/problem/2866

이 문제는 Set을 이용하여 구현할 수 있습니다.

문제를 잘 확인해보면 중복되는 경우 반복을 종료합니다. 따라서 Set에서 해당 문자열을 체크한 후 이미 존재한다면 반복을 종료하는 방식으로 탐색합니다.

여기서 중요한 점은 문자열을 입력받을 때 세로 방향으로 읽기 때문에 입력의 인덱스를 반대로 입력받는 것입니다. 그 후 현재 세로줄 위치만큼 문자열을 substring하여 문자열을 잘라낸 후 중복 체크를 진행합니다.

다음은 코드입니다.

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

class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        String[] arr = new String[M];
        for(int i=0;i<N;i++){
            String s = br.readLine();
            for(int j=0;j<M;j++){
                if(i==0) arr[j] = String.valueOf(s.charAt(j));
                else arr[j] += String.valueOf(s.charAt(j));
            }
        }

        if(N == 2){
            System.out.println(0);
            return;
        }

        for(int i=1;i<N-1;i++){
            Set<String> set = new HashSet<>();

            for(int j=0;j<M;j++){
                String key = arr[j].substring(i);
                if(set.contains(key)){
                    System.out.println(i-1);
                    return;
                }
                else set.add(key);
            }

        }
        System.out.println(N-1);
    }
}

profile
저는 상황에 맞는 최적의 솔루션을 깊고 정확한 개념의 이해를 통한 다양한 방식으로 해결해오면서 지난 3년 동안 신규 서비스를 20만 회원 서비스로 성장시킨 Software Developer 최민길입니다.

0개의 댓글

관련 채용 정보