import sys
from functools import cmp_to_key
input = sys.stdin.readline
def cmpDic(a,b):
if(a[1]<b[1]):
return 1
elif (a[1]>b[1]):
return -1
if(len(a[0])<len(b[0])):
return 1
elif(len(a[0])>len(b[0])):
return -1
if a>b:
return 1
else:
return -1
N, M= map(int,input().split())
res={}
for i in range(N):
a=input().rstrip()
if(len(a)<M):
continue
if(a in res):
res[a]+=1
else:
res[a]=1
res = [(k, v) for k, v in res.items()]
res.sort(key=cmp_to_key(cmpDic))
for i,j in res:
print(i)
from functools import cmp_to_key
def cmpFile(a,b):
if a[0].upper() > b[0].upper():
return 1
elif a[0].upper() < b[0].upper():
return -1
else:
if int(a[1]) > int(b[1]):
return 1
elif int(a[1]) < int(b[1]):
return -1
return 0
def solution(files):
answer = []
res=[]
for i in files:
head=0
number=0
for j in range(len(i)):
if head==0 and '0'<=i[j]<='9':
head=j
if head!=0 and number==0 and ('0'>i[j] or i[j]>'9'):
number=j
if(number==0):
number=len(i)
answer.append([i[:head],i[head:number],i[number:]])
answer.sort(key=cmp_to_key(cmpFile))
for head,number,tail in answer:
res.append(head+number+tail)
return res
풀이
파일명을 특정 기준을 따라 정렬해라
head, number, tail 구역으로 나눈다.
나눈 파일명을 기준에 따라 정렬하기 위해 cmpFile함수를 작성하고 cmp_to_key를 사용해서 비교함수로 사용한다
정렬한 파일명을 다시 합쳐서 리턴한다.
특이사항
람다와 정규식을 사용해서 풀면 이정도로 줄일 수 있단다…
import re
def solution(files):
a = sorted(files, key=lambda file : int(re.findall('\\d+', file)[0]))
b = sorted(a, key=lambda file : re.split('\\d+', file.lower())[0])
return b