본문 바로가기
Algorithm/baekjoon

baekjoon 5052: 전화번호 목록

by 갈잃자 2022. 6. 30.

https://www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net


초기 구현 방법:

 

  1. 완전탐색 but 시간초과
  2. 그렇다면 전부 탐색하지 않게 조건문을 넣어줌. but 시간초과
  3. sort를 사용 (단순 올림차순 sort, key를 len으로 둔 sort) but 시간초과
t = int(input())
for tc in range(t):
    n = int(input())
    arr = []
    lenArr=[0]*11
    for i in range(n):
        arr.append((input()))
    result = True

    arr.sort(key=lambda x: (len(x), x))

    for i in range(len(arr)):
        lenArr[len(arr[i])]+=1

    st = 0
    for i in range(len(lenArr)):
        if st >= len(arr):
            break

        if result ==False:
            break

        if lenArr[i] != 0:
            while lenArr[i] !=0:
                if result ==False:
                    break
                lenArr[i] -=1

                for j in range(st+1,len(arr)):
                    if arr[st] in arr[j]:
                        result = False
                        break
                st+=1
    if result ==False:
        print('NO')
    else:
        print('YES')

 

찾는 알고리즘에 큰 차이는 없지만, 문자마다 기준이 되는 문자의 해당 길이까지만을 검색하여 찾아주는 알고리즘을 다시 새로 짰다.

t = int(input())
for _ in range(t):
    n = int(input())
    arr = []
    for _ in range(n):
        arr.append(input().strip())
    arr.sort()

    for i in range(len(arr)-1):
        if arr[i] == arr[i+1][0:len(arr[i])]:
            print('NO')
            break
    else:
        print('YES')

어이없음

'Algorithm > baekjoon' 카테고리의 다른 글

baekjoon 4195: 친구 네트워크  (0) 2022.07.07
baekjoon 7490: 0 만들기  (0) 2022.07.01
baekjoon 9081: 단어 맞추기  (1) 2022.06.27
baekjoon 2473: 세 용액  (0) 2022.06.22
beakjoon 16500: 문자열 판별  (0) 2022.06.14

댓글