백준 1235

jeonghens·2024년 2월 5일

알고리즘: BOJ

목록 보기
17/125

n명의 학번이 주어지고, n명의 학생을 구분할 수 있는 학번의 최소 길이를 구하는 문제이다.
(단, 주어지는 학번의 길이는 모두 같다.)

학번 자체는 주어지는 값이다.
따라서 학번 뒷자리부터 하나씩 늘려가며, 같은 값이 존재하지 않을 때의 학번 길이를 출력하면 된다.


학번은 문자열로 받은 뒤, 슬라이싱을 이용하여 역순으로 정렬된 값을 리스트(id_list)에 저장한다.

그리고 for문을 통해 길이를 하나씩 늘려가는데,
만약 id_list와 set(id_list)의 길이가 같다면 중복된 값이 없다는 의미이므로,
이때의 k 값이 학번의 최소 길이이다.

즉, 집합 자료형의 성질을 이용해서 학번의 유일성을 확인할 수 있고,
코드(정답)는 다음과 같다.

# 1235

import sys

n = int(sys.stdin.readline())

ids = []
for _ in range(n):
    ids.append(sys.stdin.readline().rstrip()[::-1])

for k in range(1, len(ids[0]) + 1):
    id_list = [id[:k] for id in ids]
    id_set = set(id_list)

    if len(id_list) == len(id_set):
        print(k)
        break

문자열(str)을 뒤집는 몇 가지 방법에 대해 짚고 넘어가자.

text = 'hello'
reversed_text = 'olleh'

1) 슬라이싱

reversed_text = text[::-1]

2) reversed() 메서드 + join() 메서드

reversed_text = ''.join(reversed(text))

3) reverse() 메서드

text_list = list(text)
text_list.reverse()
reversed_text = ''.join(text_list)
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글