문제 링크 : 백준 1181번
단어를 정렬하는 문제다.
처음 봤을 땐 ord를 사용해 유니코드값을 이용해야겠다고 생각했지만, sort 정렬이 문자까지 정렬해주는 줄 처음 알게됐다.
n = int(input())
lst = []
for i in range(n):
lst.append(input())
lst.sort() ## 괄호 안에 아무 값도 넣지 않으면 알파벳 순서대로 정렬을 해 준다.
lst.sort(key = len) ## 문자열 길이 순으로 정렬.
for i in lst:
print(i)
정렬 순서를 주의해야 되는데, 상위 조건 A와 하위 조건 B가 있으면
먼저 B로 정렬을 한 후에 A로 정렬을 해야 원하는 결과를 얻을 수 있다.
문제에서 중복은 출력하지 말라는 조건을 안보고 제출하는 바람에 탈락.
n = int(input())
lst = []
for i in range(n):
lst.append(input())
set_lst = set(lst) ## set으로 변환해서 중복값을 제거
lst = list(set_lst) ## 다시 list로 변환
lst.sort()
lst.sort(key = len)
for i in lst:
print(i)
sort는 변환된 값을 변수에 저장까지 해준다. 덕분에 lst.sort() 이후 나오는 lst는 정렬된 값을 그대로 출력한다.
하지만 set(lst)같은 명령은 단순히 lst를 set으로 바꿔줄 뿐이지, 그 타입을 그대로 lst라는 변수에 저장해주지 않는다.
그렇기 때문에 set_lst라는 변수를 선언해서 그 값을 따로 저장해주고, 그 값을 list로 다시 변환해준다.
input()으로 값을 받는 이 코드는 1028ms 시간이 걸렸다.
import sys
n = int(sys.stdin.readline())
lst = []
for i in range(n):
lst.append(sys.stdin.readline()) ## 여기가 문제
set_lst = set(lst)
lst = list(set_lst)
lst.sort()
lst.sort(key = len)
for i in lst:
print(i)
input()과 sys.stdin.readline()의 속도를 비교해보기 위해서 답안 제출을 했는데, 출력 형식이 잘못되었다면서 오답으로 결과가 나왔다.
알아보니 이유는 sys.stdin.readline()은 '\n\'을 포함하는 입력이기 때문에 연속으로 값을 입력받는 for문에서 에러가 발생했다.
import sys
n = int(sys.stdin.readline())
lst = []
for i in range(n):
lst.append(sys.stdin.readline().strip())
set_lst = set(lst)
lst = list(set_lst)
lst.sort()
lst.sort(key = len)
for i in lst:
print(i)
그래서 .strip()입력해주니까 통과.
시간은 108ms가 나왔다. input()과 비교했을 때, 거의 1/10 수준의 빠르기다.