https://www.acmicpc.net/problem/2179
n = int(input())
a = [input() for _ in range(n)] # 원본
b = sorted(list(enumerate(a)), key=lambda x: x[1]) # 인덱스와 같이 저장 + 알파벳 순 정렬
# 정렬하는 이유: 모든 문자열 쌍을 다 비교하지 않고 인접한 문자열끼리만 비교하면 되므로
def check(a, b): # 앞에서부터 겹치는 최장 길이 체크하는 함수
cnt = 0
for i in range(min(len(a), len(b))): # 인덱스 범위 초과하지 않게 더 짧은 걸 기준으로 비교해야됨
if a[i] == b[i]:
cnt += 1
else:
break
return cnt
length = [0] * (n + 1) # 인덱스에 최장공통길이 저장
maxlength = 0
for i in range(n - 1):
tmp = check(b[i][1], b[i + 1][1]) # 본인과 다음꺼만 비교
maxlength = max(maxlength, tmp)
length[b[i][0]] = max(length[b[i][0]], tmp)
length[b[i + 1][0]] = max(length[b[i + 1][0]], tmp)
first = 0
for i in range(n):
if first == 0: # 첫번째 단어 찾기
if length[i] == maxlength:
first = a[i]
print(first)
pre = a[i][:maxlength] # 공통되는 부분 저장(두번째 문자열 출력 위해)
else: # 두번째 단어 찾기
if length[i] == maxlength and a[i][:maxlength] == pre: # 최장+저장해두었던 공통되는 부분과 일치
print(a[i])
break
'백준' 카테고리의 다른 글
백준 17182. 우주 탐사선 (0) | 2024.11.17 |
---|---|
백준 1083. 소트 (0) | 2024.11.16 |
백준 2056. 작업 (0) | 2024.11.13 |
백준 14916. 거스름돈 (0) | 2024.11.11 |
백준 30689. 미로 보수 (0) | 2024.11.09 |