sohyeon kim

[Python] 백준 : 학생 번호 1235, for in, strip() 본문

Coding Test

[Python] 백준 : 학생 번호 1235, for in, strip()

aotoyae 2024. 12. 6. 00:40
728x90

 

 

📝 문제

이번에는 학생들을 더욱 효율적으로 관리하기 위해 학생마다 고유한 학생 번호를 부여하기로 하였다. 학생 번호는 0부터 9 사이의 숫자로 이루어진 문자열로, 모든 학생들의 학생 번호는 서로 다르지만 그 길이는 모두 같다.

학생들의 번호를 부여해 놓고 보니, 김진영 조교는 어쩌면 번호가 지나치게 긴 것은 아닌가 싶은 생각이 들었다. 예를 들어 아래와 같은 7자리의 학생 번호를 보자.

오민식 1212345
김형택 1212356
이동호 0033445

 

이처럼 학생 번호를 굳이 7자리로 하지 않고, 뒤에서 세 자리만을 추려서 남겨 놓아도 모든 학생들의 학생 번호를 서로 다르게 만들 수 있다.

오민식 345
김형택 356
이동호 445

 

하지만 세 자리보다 적게 남겨 놓아서는 모든 학생들의 학생 번호를 서로 다르게 만들 수 없다.

학생들의 번호가 주어 졌을 때, 뒤에서 k자리만을 추려서 남겨 놓았을 때 모든 학생들의 학생 번호를 서로 다르게 만들 수 있는 최소의 k를 구하는 프로그램을 작성하시오.

 

🧞‍♂️ 풀이

import sys
sys.stdin = open('input.txt', 'r')
# input = sys.stdin.readline

N = int(input())
nums = [input().strip() for _ in range(N)]

for i in range(1, len(nums[0]) + 1):
    lst = []

    for j in range(N):
        if nums[j][-i:] in lst:
            break
        else:
            lst.append(nums[j][-i:])

    if len(lst) == N:
        print(i)
        break

 

나는 문제 그대로 각 숫자들을 뒤부터 slice 해 count 를 올려 비교해가고,

서로 다 다른 숫자라면 print 하려 했지만, 모든 숫자를 같은 자릿수로 비교할 필요가 없었다.

 

 

 

🔗 https://www.acmicpc.net/problem/1235

 

 

 

728x90
반응형