백준 학생 번호

KIMYEONGJUN·2024년 11월 29일
0
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

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

첫째 줄에 구하고자 하는 가장 작은 k값을 출력한다.

내가 이 문제를 보고 생각해본 부분

BufferedReader를 사용하여 입력받는다.
첫 번째 줄에서 학생의 수 N을 읽고, 그 다음 N개의 학생 번호를 배열에 저장한다.
각 학생 번호의 길이를 구하고,
1부터 시작하여 k를 증가시켜 가며 뒤에서 k자리만 남겼을 때 모든 학생 번호가 서로 다른지 확인한다.
HashSet을 사용하여 중복된 번호가 있는지 검사합니다. 중복이 발견되면 더 이상 진행하지 않고, k 값을 증가시킨다.
모든 학생 번호가 서로 다를 경우, 해당 k 값을 출력하고 프로그램을 종료한다.

코드로 구현

package baekjoon.baekjoon_24;

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

// 백준 1235번 문제
public class Main853 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        String[] studentNumbers = new String[N];

        for(int i = 0; i < N; i++) {
            studentNumbers[i] = br.readLine();
        }

        int length = studentNumbers[0].length();

        // k의 최소값을 찾기 위해 1부터 시작
        for(int k = 1; k <= length; k++) {
            HashSet<String> uniqueSuffixes = new HashSet<>();
            boolean allUnique = true;

            for(int i = 0; i < N; i++) {
                // 뒤에서 k자리 추출
                String suffix = studentNumbers[i].substring(length - k);
                // HashSet에 추가하여 중복 여부 확인
                if(!uniqueSuffixes.add(suffix)) {
                    allUnique = false;
                    break;
                }
            }

            // 모든 번호가 서로 다르면 k를 출력하고 종료
            if(allUnique) {
                System.out.println(k);
                return;
            }
        }

        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글