BOJ : 전화번호 목록 [5052]

재현·2021년 7월 10일
0
post-custom-banner

1. 문제


전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오.

전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다.

예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자

긴급전화: 911
상근: 97 625 999
선영: 91 12 54 26
이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가 걸리기 때문이다. 따라서, 이 목록은 일관성이 없는 목록이다.

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

2. 아이디어


  • mine (문법 오류❗)
    1. 전화번호를 오름차순으로 정렬하면 i와 i+1만 비교하면 된다.
    2. 포함 여부를 확인할 때 문법적인 오류때문에 실패했다.
  • clone
    1. NO가 나오면 break
    2. arr[i+1]:len(arr[i])]

출처 : https://jinho-study.tistory.com/311

3. 코드


mine

import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
  n = int(input())
  arr = []
  tag = True
  for __ in range(n):
    arr.append(input())
  arr.sort()
  for i in range(n-1):
    if arr[i] in arr[i+1]:
      print('NO')
      tag = False
  if tag:
    print('YES')

clone

import sys

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

endFlag = False

for _ in range(t):
    n = int(sys.stdin.readline())
    numberList = list(sys.stdin.readline().rstrip() for _ in range(n))
    numberList.sort()

    for i in range(len(numberList)-1):
        if numberList[i] in numberList[i+1][:len(numberList[i])]:
            print("NO")
            endFlag = True
            break
    if endFlag == False:
        print("YES")
    endFlag = False

출처 : https://kyoung-jnn.tistory.com/88

profile
성장형 프로그래머
post-custom-banner

0개의 댓글