코깽이의 코딩일기

Python 백준 1181 - 단어 정렬 본문

PS/백준

Python 백준 1181 - 단어 정렬

코깽이 2023. 9. 27. 16:37
반응형

백준 링크

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net


문제

입력

출력

입출력 예시


제출한 코드

N = int(input())

data = []

for i in range(N):
    data.append(input())

data = list(set(data))
data.sort(key=lambda x: (len(x), x))

print(*data, sep="\n")

 

처음 제출한 코드이다.

 

  1. N 입력받기
  2. N번 data에 값 넣기
  3. 중복 제거를 위한 set() 함수 사용
  4. 길이순 -> 사전순 정렬을 위하여 sort() 함수 사용
  5. sort() 함수의 매개변수에 labda함수를 전달
  6. 출력 조건에 맞게 "\n"을 sep으로 설정하여 data를 출력

 

import sys

N = int(sys.stdin.readline())

data = []

for i in range(N):
    data.append(sys.stdin.readline().strip())

data = list(set(data))
data.sort(key=lambda x: (len(x), x))

print(*data, sep="\n")

 

이전 코드와 동일한 방식으로 진행되었지만 input() 대신 sys.stdin.readline()을 사용하여 코드를 수정하였다.

마지막 "\n"가 data에 append 되기 때문에 strip() 함수를 이용하여 제거시켜 주었다.

테스트 케이스에서 과연 시간이 얼마나 줄어들지 궁금하여서 작성하게 되었다.

 

 

내가 제출한 코드 기준으로 입력받는 방식만 바꿨을 뿐인데 속도차이가 약 14배가량 나오는 것을 확인할 수 있었다.

반응형