Python_알고리즘/Silver IV
1235. [Python]학생 번호
최근영
2023. 4. 1. 22:59
1. 문제
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 128MB
- 문자열
- 구현
3. 파이썬 코드
import sys
input = sys.stdin.readline
N = int(input())
num_list = []
for _ in range(N):
num_list.append(input().strip())
# 문자의 길이를 받아올 변수 생성 => 몇자리 수까지 존재하는지 확인
total_length = len(num_list[0])
# 문자열 슬라이싱을 위해 1부터 맨마지막숫자까지
for i in range(1,total_length+1):
# 체크해줄 변수생성
flag = 0
# 딕셔너리 생성하여 매 딕셔너리마다 값 체크
ans_list = {}
for j in num_list:
# 숫자 리스트의 뒷부분부터 슬라이싱 시작하며 딕셔너리에 존재여부 확인
if j[total_length-i:] in ans_list:
ans_list[j[total_length-i:]] += 1
else:
ans_list[j[total_length-i:]] = 1
# 딕셔너리 value 값중 v가 1보다 큰 경우 flag 체크 변수에 1을 넣어줌
for v in ans_list.values():
if v > 1:
flag = 1
break
# flag 가 2이상인 경우 같은 값이 한개라도 존재하는 것이므로 그 외의 경우를 체크
if flag != 1:
print(i)
break
4. 문제를 풀고난 후 생각
- 일단 N의 갯수만큼 인풋값이 들어오기 때문에 리스트에 그 값들을 모두 넣어준다.
- 조건에서 모든 문자의 길이는 동일하다 하였으므로 한개의 길이를 체크하는 변수를 만들어 길이를 체크해준다.
- 이 체크한 값을 바탕으로 뒷부분부터 문자열을 슬라이싱해 가며 딕셔너리를 활용하여 모든 문자가 다른지 같은 문자가 있는지를 확인하여 flag 라는 변수에 값을 넣어줌으로써 확인한다.
- 이 문제는 N이 1000까지 범위고 문자열 길이가 100 까지 이기때문에 반복문을 여러번 사용해도 시간초과가 나거나 하지 않았던 것 같다.
5. 문제를 푸는데 도움이 되는 지식
- 문자열 슬라이싱