츄르사려고 코딩하는 코집사입니다.
1. [백준 알고리즘] 백준 1235번 학생 번호 자바(JAVA)
1) 문제번호 : 1235번
2) 문제 출처
https://www.acmicpc.net/problem/1235
2. 문제
이번에는 학생들을 더욱 효율적으로 관리하기 위해 학생마다 고유한 학생 번호를 부여하기로 하였다. 학생 번호는 0부터 9 사이의 숫자로 이루어진 문자열로, 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같다.
학생들의 번호를 부여해 놓고 보니, 김진영 조교는 어쩌면 번호가 지나치게 긴 것은 아닌가 싶은 생각이 들었다. 예를 들어 아래와 같은 7자리의 학생 번호를 보자.
이름번호
오민식 | 1212345 |
김형택 | 1212356 |
이동호 | 0033445 |
이처럼 학생 번호를 굳이 7자리로 하지 않고, 뒤에서 세 자리만을 추려서 남겨 놓아도 모든 학생들의 학생 번호를 서로 다르게 만들 수 있다.
이름번호
오민식 | 345 |
김형택 | 356 |
이동호 | 445 |
하지만 세 자리보다 적게 남겨 놓아서는 모든 학생들의 학생 번호를 서로 다르게 만들 수 없다.
학생들의 번호가 주어 졌을 때, 뒤에서 k자리만을 추려서 남겨 놓았을 때 모든 학생들의 학생 번호를 서로 다르게 만들 수 있는 최소의 k를 구하는 프로그램을 작성하시오.
3. 제약사항
4. 입력
첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부터 9 사이의 숫자로 이루어진 문자열이 주어진다. 문자열의 길이는 100보다 작거나 같다.
5. 출력
첫째 줄에 구하고자 하는 가장 작은 k값을 출력한다.
6. 풀이
- #1 : 학생 수 입력받는다.
- #2 : 학생 번호를 List 형태로 입력 받기 위해 정의한다.
- #3 : 학생 수 만큼 학생 번호를 입력받는다.
- #4 : 학생 번호의 최대 자리수를 정의한다.
- #5 : 학생 번호 자리 수만큼 반복하여 뒤에서부터 subString 함수를 사용해 학생 번호를 추출하고, 추출한 번호를 다시 List 형태로 받는다. List 형태에서 자른 학생 번호가 없으면 List에 add를 하고, 있으면 그 자리수로는 구분이 불가하니 다시 반복문을 돌린다. 처리한 후, 학생 수와 값을 입력받은 List의 사이즈가 같으면 그 값을 출력한다.
7. 소스 코드
import java.io.*;
import java.lang.System.Logger;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//#1
int N = Integer.parseInt(br.readLine()); // 학생 수
//#2
List<String> studentNumberList = new ArrayList<String>();
//#3
for(int i = 0; i < N; i++) {
studentNumberList.add(br.readLine());
}
//#4
int numberSize = studentNumberList.get(0).length();
//#5
for(int i = 0; i < numberSize; i++) {
List<String> subStringList = new ArrayList<>();
for(int j = 0; j < N; j++) {
String tempNumber = studentNumberList.get(j);
tempNumber = tempNumber.substring(numberSize - i - 1, numberSize);
if(!subStringList.contains(tempNumber)) {
subStringList.add(tempNumber);
} else {
break;
}
}
if(N == subStringList.size()) {
System.out.println(i+1);
break;
}
}
}
}
'알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[백준 알고리즘] 백준 4999번 아! 자바(JAVA) (0) | 2022.08.07 |
---|---|
[백준 알고리즘] 백준 2744번 대소문자 바꾸기 자바(JAVA) (0) | 2022.08.06 |
[백준 알고리즘] 백준 24723번 녹색거탑 자바(JAVA) (0) | 2022.05.24 |
[백준 알고리즘] 백준 25083번 새싹 자바(JAVA) (0) | 2022.05.20 |
[백준 알고리즘] 백준 14920번 3n+1 수열 자바(JAVA) (0) | 2022.04.25 |
[백준 알고리즘] 백준 2822번 점수 계산 자바(JAVA) (0) | 2022.04.07 |
[백준 알고리즘] 백준 2167번 2차원 배열의 합 자바(JAVA) (0) | 2022.04.03 |
[백준 알고리즘] 백준 3711번 학번 자바(JAVA) (0) | 2022.03.30 |
최근댓글