본문 바로가기

코딩테스트(python)/백준

백준 1181번 파이썬

반응형

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