나를 기록하다
article thumbnail
반응형

백준(baekjoon) 1181 단어 정렬(sort)

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 메서드는 원본 리스트를 변경

 

기본적인 문제인데 구동시간을 생각해야 한다는 것을 배울 수 있었던 문제였다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...