반응형
1. 문제
2. 설명
반복문을 통해 n번 입력 받고, 이를 배열에 추가해준다.
그 후 배열에서 중복을 제거해주기 위해 set을 사용하고, sort함수를 사용할 것이므로 list로 만들어준다.
최종적으로 길이가 가장 긴 것이 마지막 항목이 되어야하므로,
알파벳 순 정렬 후에 길이 순 정렬을 한다.
key 속에 len이라는 옵션을 지정하여 정렬하면, 길이 순서대로 정렬이 된다.
sort로 정렬 -> sort (key=len) 정렬을 하면, 사전 순을 유지한 상태에서 길이가 짧은 순서로 정렬이 된다.
3. 코드
다른 사람이 작성한 코드 1)
n = int(input())
lst = []
for i in range(n):
lst.append(input())
set_lst = set(lst)
lst = list(set_lst)
lst.sort()
lst.sort(key = len)
for i in lst:
print(i)
1순위: 길이 순 정렬 / 2순위 : 사전 순 정렬 -> sort with lambda를 사용
길이가 짧은 것부터, 길이가 같으면 사전 순으로 data 리스트의 요소들을 정렬
n = int(input())
data = []
for _ in range(n) :
value = input()
data.append(value)
data = list(set(data))
data = sorted(data, key=lambda x: (len(x), x))
for d in data :
print(d)
내가 작성한 코드)
import sys
n = int(sys.stdin.readline())
arr = []
for i in range (0,n):
str = input()
if str not in arr :
arr.append(str)
for i in range(len(arr) - 1, 0, -1):
for j in range(i):
if len(arr[j]) > len(arr[j+1]):
arr[j], arr[j + 1] = arr[j + 1], arr[j]
elif len(arr[j]) == len(arr[j+1]):
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
for i in arr:
print(i)
버블정렬)
def bubble_sort(arr):
for i in range(len(arr) - 1, 0, -1):
for j in range(i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
처음엔 버블정렬을 사용하여 길이 순으로 정렬해준 뒤 같은 길이인 항목끼리 만나면 알파벳 순으로 정렬해주는 방식을 사용하였다.
for문도 여러 개에다가 2중 for문을 사용하니 타임아웃이 발생한건지...
애증의 타임아웃을 만나게 되었다.
다른 방법을 찾아보니, sort() 괄호안에 정렬기준을 넣으면 그 기준대로 정렬된다는 것을 알게되었다.
반응형
'코딩테스트(python) > 백준' 카테고리의 다른 글
백준 18870번 파이썬 (0) | 2022.09.22 |
---|---|
백준 10841번 파이썬 (0) | 2022.09.20 |
백준 11651번 파이썬 (0) | 2022.09.14 |
백준 11650번 파이썬 (0) | 2022.09.14 |
백준 1427번 파이썬 (0) | 2022.09.13 |