[백준 1235 / Silver4] 학생 번호 - Java(자바)

토끼굴·2025년 5월 17일

작성자 : 고유진
문제 링크 : https://www.acmicpc.net/problem/1235

❓문제 설명


❗입력 및 출력


🎁 문제 풀이


최대한 공통적으로 겹치는 부분이 있는 번호들을 비교하며 남는 뒷 자리 수만큼 다른 번호도 겹치는 경우 없이 만족할 수 있도록 k를 구해야 함
즉, 어떤 최소 k를 찾으면 모든 학번의 오른쪽 k자리가 서로 다른 문자열이 되는 지를 구해야 함
중복을 허용하지 않는 set 활용
N명의 학생 번호에서 맨 뒷자리 숫자부터 k개까지 잘라서 set에 넣어주고 이때의 set의 size()가 N과 같다면 다 중복이 없다는 뜻이므로 그게 답이 됨
이때 k번째 자리수까지 반복문이 돌 때마다 set 초기화해주어야 함
<예제>
1212345
1212356
0033445
k=1
1212345
1212356
0033445
stu = {"5", "6"} -> size() = 2 이므로 X
k=2
1212345
1212356
0033445
stu = {"45", "56"} -> size() = 2 이므로 X
k=3
1212345
1212356
0033445
stu = {"245","356", "445"} -> size() = 3 이므로 학생 수 N과 같고 끝의 세 자리가 겹치지 않고 구분 가능하므로 답

🖥️ 코드


import java.io.*;
import java.util.*;
 
public class Main {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      int N = Integer.parseInt(in.readLine());
      Set<String> stu = new HashSet<>();
 
      String[] input = new String[N];
      for(int i=0;i<N;i++) input[i] = in.readLine();
      int len = input[0].length();
 
      for(int k=1;k<=len;k++){
         for(int i=0;i<N;i++){
            stu.add(input[i].substring(len-k));
         }
         if(stu.size()==N){
            System.out.println(k);
            return;
         }
         stu.clear();
      }
   }
}
profile
10마리의 토끼가 열심히 공부 중.. 집단 지성으로 성장해요.

0개의 댓글