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. 문제를 푸는데 도움이 되는 지식

 

  • 문자열 슬라이싱