문제

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

 

 

조건 및 입출력

1. 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

2. 조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

 

 

코드 (Python 3)
# 입력부
trys=int(input());
voca=[];
for i in range(trys):
    voca.append(input());

# 처리부
voca=set(voca); #중복제거
result=sorted(voca, key=lambda x : [len(x),x]); #단어 길이순으로 정렬

# 출력부
for i in range(len(result)):
    print(result[i]);

 

 

풀이 과정

문제를 처음 봤을 때, '아스키코드로 처리할까?' 라고 생각했는데 코드가 너무 길어질 것 같아서 포기했다.

다른 방법을 떠올리다가 예전에 올림픽 문제에서 썼던 lambda 함수가 떠올랐고, 이내 적용했다.

 

sort(sorted)함수는 기본적으로 오름차순 정렬을 지원하니, 단어 길이만 정렬 기준으로 삼으면 됐다.

고로 key값에 len함수를 적용해 단어 길이만큼 정렬하도록 지정하였고, 출력 결과 역시 바르게 나왔다.

 

 


 

코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요!

+ 더 좋은 풀이 방법이 있다면 알려주세요 :)

+ Recent posts