알고리즘/자료구조
[BOJ] 백준 1235 - 학생 번호 풀이
송승현(SSH)
2022. 9. 20. 20:59
1. 문제
https://www.acmicpc.net/problem/1235
1235번: 학생 번호
첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부
www.acmicpc.net
2. 풀이
입력에서 학생의 수와 번호가 주어진다. 문제에서 뒤의 자리로 판단하기에 반복문의 인덱스를 거꾸로 돌려도 되지만, 편하게 인덱스를 가져가기 위해 학생의 번호를 입력받고 뒤집어서 배열에 넣었다.
그 후 LinkedHashSet을 선언하여 입력으로 받은 학생의 번호를 반복문으로 subString을 잘라 Set에 넣어주었다. while 반복문이 끝나기 직전 현재 Set에 들어있는 수가 학생수와 같다면 모든 학생을 구분한 것이기에 그때의 result 값이 정답이다.
3. 소스 코드
import java.io.*;
import java.util.*;
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));
ArrayList<String> studentList = new ArrayList<>();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringBuffer sb = new StringBuffer();
sb.append(br.readLine());
sb.reverse();
studentList.add(sb.toString());
}
int result = 1;
while (true) {
Set<String> subStringList = new LinkedHashSet<>();
for (int i = 0; i < result; i++) {
for (int j = 0; j < N; j++) {
subStringList.add(studentList.get(j).substring(0, result));
}
}
if (subStringList.size() == N) {
break;
}
else {
result += 1;
}
}
bw.write(Integer.toString(result));
bw.flush();
bw.close();
br.close();
}
}