반응형
1. 첫번째 풀이(실패)
이 문제는 처음에 쉬워보여서 바로 시도하였으나, 런타임에러로 실패하였다.
처음에 제출한 코드는 다음과 같다.
import sys
input = sys.stdin.readLine
n = int(input())
lst = []
for i in range(n):
lst.append(input().strip())
lst = list(set(lst))
lst.sort()
lst.sort(key = len)
for i in lst:
print(i)
실패 원인
sys.stdin.readLine() 함수를 사용하여 입력을 받을 때, 전체 입력을 한 번에 처리하기 때문. 입력이 많은 경우 처리 시간이 길어질 수 있다.
시간을 줄이기 위해서는 입력을 한 줄씩 처리해야 한다.
2. 두번째 코드(성공)
import sys
# 입력 함수를 sys.stdin.readline으로 설정
input = sys.stdin.readline
n = int(input())
lst = set()
# 한 줄씩 입력을 받아서 집합에 추가
for i in range(n):
word = input().strip()
lst.add(word)
# 집합을 정렬한 후 길이순으로 정렬하여 리스트로 변환
lst = sorted(sorted(lst), key=len)
# 리스트의 원소를 한 줄씩 출력
for word in lst:
print(word)
sorted와 sort의 차이
sorted()
- sorted() 함수는 원본 리스트를 변경하지 않고, 정렬된 새로운 리스트 반환
- 원본 리스트는 그대로 유지, 정렬된 결과를 새로운 리스트로 받아 사용
- sorted() 함수는 key 매개변수를 사용하여 정렬 기준을 지정할 수 있으며, 기본적으로 오름차순으로 정렬
sort()
- sort() 메서드는 원본 리스트를 정렬하여 변경한다. 원본 리스트 자체가 정렬되므로 반환값은 없다.
- 따라서, sort() 메서드를 호출한 후에는 정렬된 리스트를 그대로 사용
- sort() 메서드도 key 매개변수를 사용할 수 있으며, 기본적으로 오름차순으로 정렬
numbers = [3, 1, 4, 2, 5]
# sorted() 함수 사용
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 출력: [1, 2, 3, 4, 5]
print(numbers) # 출력: [3, 1, 4, 2, 5] (원본 리스트는 변경되지 않음)
# sort() 메서드 사용
numbers.sort()
print(numbers) # 출력: [1, 2, 3, 4, 5] (원본 리스트가 정렬됨)
이처럼 sorted 함수는 정렬된 새로운 리스트 반환 / sort 메서드는 원본 리스트를 변경
기본적인 문제인데 구동시간을 생각해야 한다는 것을 배울 수 있었던 문제였다.
반응형
'Algorithm > baekjoon' 카테고리의 다른 글
[백준 1312 파이썬(python) / 자바(java)] 소수 (0) | 2023.06.20 |
---|---|
[백준 1251 파이썬(python)/자바(java)] 단어 나누기 (0) | 2023.06.19 |
[백준 10250 자바/java] ACM 호텔 (0) | 2023.05.26 |
[백준 4153 자바/Java] 직각삼각형 (0) | 2023.05.25 |
[백준 1085 자바/Java] 직사각형에서 탈출 (0) | 2023.05.25 |