파이썬 알고리즘 156번 | [백준 5052번] 전번 목록 - 진행 중 ~

Yunny.Log ·2022년 5월 24일
0

Algorithm

목록 보기
159/318
post-thumbnail

156. 전번 목록

1) 어떤 전략(알고리즘)으로 해결?

2) 코딩 설명

<내 풀이>



  • 하나만 존재해도 게임 끝이니깐 sort()로 문자열 정렬하면 앞에가 똑같은 애들끼리 정렬되거든? 그래서 앞 뒤만 비교하면 okay

<내 틀렸던 풀이, 문제점>


import sys
t=int(sys.stdin.readline().strip())

for i in range(t) : 
    chk=0
    n=int(sys.stdin.readline().strip())
    lis=[]
    for j in range(n) :
        lis.append(sys.stdin.readline().strip())

    lis=sorted(lis, key=len) #길이순 정렬

    for k in range(1,len(lis)) :
        #print(lis[k][1])
        for m in range(0,k) : #0부터 마지막에서 하나 
            if lis[k][0] == lis[m][0]  :
                #print(lis[k][0:len(lis[m])],"헬로",lis[m])
                if lis[k][0:len(lis[m])]==lis[m] :
                    chk=1
                    break

    if chk==1:
        print("NO")
    else :
        print("YES")

=> 시간초과

<반성 점>

  • 여기선 굳이 sort(key=len) 할 필요없이 sort만 하면 되는 문제였다!

<배운 점>

  • sort를 할 때 key=len 속성을 통해서 길이 기준 정렬 가능
  • list 자르는 것 list[:범위] 하면 내가 원하는 길이까지 slicing 가능

0개의 댓글