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

장철현·2024년 1월 31일
0

백준

목록 보기
62/80

링크

2866 문자열 잘라내기

문제

풀이

생각보다 간단하게 풀었다.
처음에 문제 이해가 힘들어서 시간이 오래 걸렸다.
열로 문자열을 만들어서 각 문자열의 첫번째 문자들을 자르고 중복이 있나 체크한다.
1. 중복이 있다면 종료
2. 중복이 없다면 count값을 올리고 다시 처음부터 실행
이 순서대로 이루어진다.

두번째 예제로 보자면
abz, lee, ftt, aaa 이렇게 나오고 앞에 문자들을 자른다
bz, ee, tt, aa 이렇게 나오고 중복이 없으니 count올리고 또 자른다
z, e, t, a 이렇게 나오고 중복이 없으니 또 자르고 count를 올린다.
그러면 공백만 남는데 공백이 나오면 종료된다.

자르는 로직은 substring(1, str.length())를 통해 잘랐다.

그리고 자른 문자열들이 중복이 있나 체크하는 부분은 hashMap을 통해 맵에 넣어서 있나 없나 체크한다. 있으면 중복이라는 소리이기에 종료했다.

코드

package com.example.demo.controller;

import com.example.demo.HW.Book;

import java.awt.desktop.PreferencesEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.sql.Array;
import java.util.*;

public class Algorithm {

    public static List<String> list = new ArrayList<>();
    public static int count = 0;

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] arr = br.readLine().split(" ");
        int r = Integer.parseInt(arr[0]);
        int c = Integer.parseInt(arr[1]);

        arr = new String[r];
        for(int i=0;i<arr.length;i++) {
            arr[i] = br.readLine();
        }

        for(int i=0;i<c;i++) {
            StringBuilder sb = new StringBuilder();

            for(int j=0;j<r;j++) {
                sb.append(arr[j].charAt(i));
            }


            list.add(sb.toString());
        }

//		System.out.println(list);

        while(true) {
            removeFirst();
            if(isDup()) {
                break;
            }

            count++;
        }

        System.out.println(count);

    }

    //중복이 있나 체크해주는 메서드
    public static boolean isDup() {
        HashMap<String, Integer> map = new HashMap<>();

        for(String element : list) {
            System.out.println(element);
            if(map.get(element) == null) {
                map.put(element, 1);
            } else {
                return true;
            }
        }

        return false;
    }


    //첫번째 단어를 지워주는 메소드
    public static void removeFirst() {

        for(int i=0;i<list.size();i++) {
            String str = list.get(i);
            str = str.substring(1, str.length());
            list.set(i, str);
        }

    }

}

0개의 댓글