팡세영
Log sey
팡세영
전체 방문자
오늘
어제
  • 분류 전체보기 (74)
    • PS (45)
      • programmers (13)
      • 백준 (29)
    • Android (16)
    • Daily (0)
    • Kotlin (6)
    • Design Pattern (2)
    • Java (1)
    • Flutter (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바
  • 완전탐색
  • 하단네비게이션바
  • 정렬
  • java
  • Kotlin
  • compose
  • 실버
  • mvvm
  • 골드
  • flutter
  • 백준
  • 안드로이드
  • binding
  • TestCode
  • 프로그래머스
  • 이분탐색
  • 해쉬맵
  • 구현
  • 의존성 주입
  • BFS
  • 문자열
  • ArcitecturePattern
  • Android
  • CustomView
  • programmers #프로그래머스
  • 코틀린
  • LEVEL2
  • DFS
  • programmers

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
팡세영

Log sey

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

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

2022. 11. 10. 15:06


https://www.acmicpc.net/problem/2866

 

2866번: 문자열 잘라내기

첫 번째 줄에는 테이블의 행의 개수와 열의 개수인 R과 C가 주어진다. (2 ≤ R, C ≤ 1000) 이후 R줄에 걸쳐서 C개의 알파벳 소문자가 주어진다. 가장 처음에 주어지는 테이블에는 열을 읽어서 문자

www.acmicpc.net


  • 입력 받은 배열에서 세로 방향으로 문자열을 추출한 후 List에 담는다.
  • 위 리스트에서 맨 앞자리를 하나씩 제거하면서 중복된 문자열을 찾는다.

[예제 입력1]

dobarz
adatak

// 세로 방향으로 뽑아낸 문자열들
da, od, ba ,at, ra, zk

// 위 리스트에서 맨 앞자리 문자를 하나씩 제거하면서 중복된 문자열을 찾는다.
a, d, a, t, a, k <- 중복 문자열 존재

 

 

 

[예제 입력2]

alfa
beta
zeta

// 세로 방향으로 뽑아낸 문자열들
abz, lee, ftt, aaa

// 위 리스트에서 맨 앞자리 문자를 하나씩 제거하면서 중복된 문자열을 찾는다.
bz, ee, tt, aa	
z, e, t, a

[Java]

import java.io.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.StringTokenizer;

public class Main
{

    public static int n,m;
    public static char arr[][];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());

        arr = new char[n][m];

        // 입력 값 배열 초기화
        for(int i=0; i<n; i++){
            String input = br.readLine();

            for(int j=0; j<m; j++){
                arr[i][j] = input.charAt(j);
            }
        }

        // 배열의 세로 방향으로 뽑은 문자열들을 리스트에 초기화
        ArrayList<String> list = makeList(0);

        // 위 리스트 문자열들의 맨 앞자리를 하나씩 제거하면서 중복이 있는지 체크
        for(int i=1; i<m; i++){
            if(findSame(i, list)){
                bw.write(i-1 + "");
                bw.flush();
                return;
            }
        }

        bw.write(n-2 + "");
        bw.flush();
    }

    // 문자열들을 세로로 뽑은 후 리스트에 추가한다.
    public static ArrayList<String> makeList(int start){
        ArrayList<String> list = new ArrayList<>();

        for(int i=0; i<m; i++){
            StringBuilder sb = new StringBuilder("");
            for(int j=start; j<n; j++){
                sb.append(arr[j][i]);
            }
            list.add(sb.toString());
        }

        return list;
    }

    // 중복되는 문자열이 있으면 true, 없으면 false;
    public static boolean findSame(int start, ArrayList<String> list){
        HashSet<String> hashSet = new HashSet<>();

        for(int i=0; i<list.size(); i++){
            String str = list.get(i).substring(start, n);

            if(hashSet.contains(str))
                return true;
            else
                hashSet.add(str);
        }

        return false;
    }


}



'PS > 백준' 카테고리의 다른 글

[백준] - 피보나치함수 (1003)  (0) 2022.11.24
[백준] 영상처리 21938  (0) 2022.11.11
[백준] - 암기왕 2776  (0) 2022.11.09
[백준] - 키 큰 사람 11292  (0) 2022.11.07
[백준] - 자리배정 10157  (0) 2022.11.06
    'PS/백준' 카테고리의 다른 글
    • [백준] - 피보나치함수 (1003)
    • [백준] 영상처리 21938
    • [백준] - 암기왕 2776
    • [백준] - 키 큰 사람 11292
    팡세영
    팡세영
    Android, CS, PS

    티스토리툴바