본문 바로가기
Problem Solving/Baekjoon

[백준] 1235 학생 번호 - Data Structure / Java

by graycode 2023. 3. 17.

 문제 링크

 

1235번: 학생 번호

첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부

www.acmicpc.net

 

 풀이 과정

각 학생의 번호를 뒤에서 1자리 범위로 잘라내어 set에 담는다.

만약 set 에 현재 잘라낸 번호가 존재하지 않는다면 set에 담고,

중복되는 번호가 있다면 반복문을 다시 수행하며 잘라낼 범위를 1 증가시킨다.

 

위의 과정을 거쳐 중복되는 번호없이 입력받은 번호를 모두 set에 담는다면 현재 잘라낸 범위 k를 출력한다.

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashSet;
import java.util.Set;

public class Main {

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

        int n = Integer.parseInt(br.readLine());

        String[] arr = new String[n];
        for (int i = 0; i < n; i++)
            arr[i] = br.readLine();

        Set<String> set = new HashSet<>();
        int len = arr[0].length(), k = 1;

        for (int i = 0; i < n; i++) {
            String sub = arr[i].substring(len - k);
            if (!set.contains(sub))
                set.add(sub);
            else {
                k++;
                i = -1;
                set.clear();
            }
        }

        bw.write(String.valueOf(k));
        bw.flush();
    }

}

댓글