https://www.acmicpc.net/problem/1235
문제
이번에는 학생들을 더욱 효율적으로 관리하기 위해 학생마다 고유한 학생 번호를 부여하기로 하였다. 학생 번호는 0부터 9 사이의 숫자로 이루어진 문자열로, 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같다.
학생들의 번호를 부여해 놓고 보니, 김진영 조교는 어쩌면 번호가 지나치게 긴 것은 아닌가 싶은 생각이 들었다. 예를 들어 아래와 같은 7자리의 학생 번호를 보자.
이름번호오민식 | 1212345 |
김형택 | 1212356 |
이동호 | 0033445 |
이처럼 학생 번호를 굳이 7자리로 하지 않고, 뒤에서 세 자리만을 추려서 남겨 놓아도 모든 학생들의 학생 번호를 서로 다르게 만들 수 있다.
이름번호오민식 | 345 |
김형택 | 356 |
이동호 | 445 |
하지만 세 자리보다 적게 남겨 놓아서는 모든 학생들의 학생 번호를 서로 다르게 만들 수 없다.
학생들의 번호가 주어 졌을 때, 뒤에서 k자리만을 추려서 남겨 놓았을 때 모든 학생들의 학생 번호를 서로 다르게 만들 수 있는 최소의 k를 구하는 프로그램을 작성하시오.
입력
첫째 줄에는 학생의 수 N(2≤N≤1,000)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 학생의 학생 번호가 순서대로 주어진다. 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같으며, 0부터 9 사이의 숫자로 이루어진 문자열이 주어진다. 문자열의 길이는 100보다 작거나 같다.
출력
첫째 줄에 구하고자 하는 가장 작은 k값을 출력한다.
학생 번호를 서로 다르게 만드는 최소의 K를 구해보자.
위경우에는
K가 1일때
5,6,5->중복이 있으니깐 불가능하다.
K가 2일때
45,56,45->마찬가지로 중복이 존재하므로 학생 번호를 식별하기에는 부적합하다.
K가 3일떄
345,356,445 -> 중복이 없으므로 학생 번호를 식별하기에 적합하다.
모든 학생들의 번호의 길이가 같으므로 첫번쨰 학생 번호의 뒤부터 시작하면서 비교하면 된다.
전체 소스 코드->
'알고리즘' 카테고리의 다른 글
백준 1240 노드 사이의 거리 C++ (0) | 2022.05.04 |
---|---|
Codeforce Way Too Long Words (0) | 2022.05.01 |
백준 1850 최대공약수 C++ (0) | 2022.05.01 |
백준 2002번 추월 C++ (0) | 2022.04.28 |
백준 24484 알고리즘 수업-깊이우선탐색 6 C++ (0) | 2022.04.23 |