최대 1 분 소요

[백준 1235번] 학생 번호

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
 
public class 백준_손수경_정답_1235 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<String> hs;
        ArrayList<String> studentNum = new ArrayList<String>();
        int n = Integer.valueOf(br.readLine());
        
        for (int i = 0; i < n; i++) {
            studentNum.add(br.readLine());
        }
        int length = studentNum.get(0).length();
        int k = length - 1;
        while (true) {
            hs = new HashSet<>();
            for (int i = 0; i < n; i++) {
                String str = studentNum.get(i).substring(k, length);
                hs.add(str);
            }
            if (hs.size() == n) {
                System.out.println(length - k);
                break;
            }
            k--;
        }
    }
}
 
cs

풀이 방법

전반적으로 HashSet클래스를 사용하는 것이 중요하다. 그리고 파이썬에서의 슬라이싱과 같은 기능을 하는 자바의 메서드는 substring(startidx, endidx) 이다. string의 s가 소문자라는 사실! 여튼 substring 메서드를 사용해서 맨뒤에 문자열만 때서 hs에 넣어준다. 만약에 hs의 크기가 학생 수만큼이 되지 않는다면 자를 문자열에서 겹치는 수가 나왔다는 것이므로 이는 학생들을 구별하기 위한 학생 번호가 될 수 없다. 그러면 startidx를 하나 줄여서 뒤에서 2개의 문자열만 떼서 hs에 넣어주고 다시 판별한다. 이런식으로 진행하다보면 학생수와 hs의 크기가 같아지면 출력값을 출력해준다.

배운 점

  • substring(startidx) : startidx부터 끝까지 슬라이싱
  • substring(startidx, endidx) : startidx부터 endidx - 1까지 슬라이싱

댓글남기기