ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1235. [Python]학생 번호
    Python_알고리즘/Silver IV 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. 문제를 푸는데 도움이 되는 지식

     

    • 문자열 슬라이싱

    'Python_알고리즘 > Silver IV' 카테고리의 다른 글

    1755. [Python]숫자놀이  (0) 2023.04.11
    1120. [Python]문자열  (0) 2023.04.09
    2578. [Python]빙고  (0) 2023.02.05
    10610. [Python]30  (0) 2023.01.31
    1789. [Python]수들의 합  (0) 2023.01.30

    댓글

Designed by Tistory.