Algorithm/BOJ(Baekjoon Online Judge)

[백준 - 1235번] 학생 번호 - Java //Wello Horld//

koucop 2019. 12. 18. 11:18

 

이번에는 BOJ의 1235번 문제 "학생 번호" 를 풀어보도록 하자

 

주어진 학생들의 학생 번호를 뒤에자리부터 k자리만큼 잘랐을 때 구분이 가능한지 (unique key인지) 를 확인해서 가장 작은 k 값을 구하면 되는 문제이다. 

입력으로 학생의 수 N이 주어지고, N개의 줄만큼 각 학생의 학생 번호가 순서대로 주어진다. 학생 번호는 서로 다르고 길이는 같으며, 0 ~ 9 의 숫자로 이루어진 100보다 작거나 같은 문자열이다.

출력으로 가장 작은 k 값을 출력하면 된다.

 

성공한 코드는 아래와 같다.

import java.io.*;
import java.util.*;
public class sample {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        String[] student = new String[N];
        HashMap<String, Boolean> map = new HashMap<String, Boolean>();
        int len = 0;
        for(int i = 0; i < N; i++){
            student[i] = br.readLine();
            if(i == 0) len = student[i].length();
        }
        int k = 0;
        base:
        for(int i = 0; i <= len; i++){
            for(int j = 0; j < N; j++){
                String sub = student[j].substring(len - i);
                if(map.containsKey(sub)){
                    map.clear();
                    continue base;
                } else {
                    map.put(sub, true);
                }
            }
            k = i;
            break;
        }
        bw.write(k + "\n");

        bw.flush();
        br.close();
        bw.close();
    }
}

 

문제 : https://www.acmicpc.net/problem/1235

 

1235번: 학생 번호

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

www.acmicpc.net

 

혹시 코드에 이상한 부분이나 틀린 부분이 있던지, 이해가 안가는 부분이 있다면 댓글로 알려주세요.