728x90
import sys
t = int(sys.stdin.readline())
for _ in range(t):
n = int(sys.stdin.readline())
number = [ sys.stdin.readline().rstrip() for _ in range(n) ] #1
number.sort() #2
flag = True
for i in range(n-1): #3
if number[i] == number[i+1][:len(number[i])]: #4
print('NO')
flag = False #5
break
if flag == True: #6
print('YES')
#1 : 숫자들을 입력받아 리스트에 저장
#2 : 정렬
#3 : 인덱스 비교를 위해 0부터 n-2까지 반복
#4 : i+1까지 비교
#5 : 일관성이 없는 목록 처리
#6 : 일관성이 있는 목록
n의 최댓값은 10,000이라서 O(N^2)로 풀면 가능할 줄 알았는데 테스트 케이스도 고려해줘야 해서 3중 for문이 된다. 괜히 고민했다가 시간만 보낸 문제 같다.
145, 1234, 123이 있을 때
정수로 정렬하면 123, 145, 1234이고
문자열로 정렬하면 123, 1234, 145이다.
문자열로 입력받아서 정렬한다는 사실을 잊어버렸었다.
그래서 비교를 i와 i+1만 해주면 된다.
문자열 슬라이싱은 리스트 안에 들어있는 문자열도 가능하다는 것을 배웠다.
number[i+1][:len(number[i]] 가 가능한 줄은 몰랐다.
파이썬 슬라이싱은 공부할수록 대단하다
비슷한 문제를 발견해서 글을 수정한다.
import sys
t = int(sys.stdin.readline())
for _ in range(t):
flag = True
n = int(sys.stdin.readline())
nums = []
for _ in range(n):
tmp = sys.stdin.readline().strip()
nums.append(tmp)
nums.sort()
for n1, n2 in zip(nums, nums[1:]):
if n2.startswith(n1):
flag = False
if flag == True:
print("YES")
else:
print("NO")
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 2504 파이썬(python) : 괄호의 값 - (★) (0) | 2022.07.21 |
---|---|
[백준] 1406 파이썬(python) : 에디터 - 이중stack (0) | 2022.07.20 |
[백준] 1120 파이썬(python) : 문자열 - 문자속비교(★) (0) | 2022.07.20 |
[백준] 7567 파이썬(python) : 그릇 (0) | 2022.07.20 |
[백준] 10820 파이썬(python) : 문자열 분석 (0) | 2022.07.19 |