이숭간 공부기록
백준 1181번 파이썬 _ 단어 정렬 본문
728x90
문제유형 : 문자열, 정렬
문제풀이 :
1순위 정렬 - 문자열 길이기준 : sorted(key=lamda x: len(x)) - 람다함수로 정렬기준 제시
2순위정렬 - 문자열길이가 같을때는 알파벳순 : 디폴트 sort
내가푼 방법보다 더 쉬운방법 : lamda를 이용해서 정렬기준의 1순위, 2순위를 한번에 지정하기
배열에 튜플형태로 (문자열, 문자열길이) 로 저장한뒤 해당 배열을 다음과같은 람다식으로 정렬
words_list.sort(key = lambda word: (word[1], word[0]))
words_list가 (문자열길이, 문자열)형태로 저장되있을경우 람다함수 안써도 그냥 sort()만 해줘도 자동으로 길이-> 알파벳으로 정렬함
또는 sort()함수는 배열이 튜플형식으로 저장되어있을때, 앞의것이 같으면 뒤를 기준으로 정렬한다.
정답코드:
import sys
input = sys.stdin.readline
n = int(input())
input_set = set(input().strip() for _ in range(n)) #중복을 없애기위해 입력값 받아서 집합으로 저장
sorted_list = list(input_set) # 집합을 다시 리스트로
sorted_list.sort(key=lambda x: len(x)) #길이를 기준으로 정렬
list = [] # 같은길이의 문자열을 담아서 재정렬하기위한 리스트
answer = [] # 최종정답 배열
for i in range(1,len(sorted_list[-1])+1): # 길이가 1부터 전체문자열중 최대길이까지
for _ in range(len(sorted_list)): # sorted_list를 확인하는데 맨앞것만 계속 확인
if len(sorted_list[0]) == i: # 길이가 i이면
list.append(sorted_list.pop(0)) # i인것들은 list에 담고, sorted_list에서 뺴냄
else:
break
if len(list) > 0: # list길이가 0이면 길이가 i인게 없다는 뜻이므로 다시 반복해야하고 아니면 정렬하고 출력
for k in sorted(list): # 같은 길이만 담긴 배열list를 알파벳순으로 정렬하고 프린트
print(k)
list = [] # 같은길이인것들은 끝낫으니까 다시 초기화
'알고리즘 > 백준' 카테고리의 다른 글
백준 11050번 파이썬 _ 이항 계수 1 (0) | 2021.02.13 |
---|---|
백준 1259번 파이썬 _ 팰린드롬수 (0) | 2021.02.13 |
백준 5052번 파이썬 _ 전화번호 목록 (0) | 2021.02.12 |
백준 10951 파이썬 _ A+B = 4 (테스트입력개수 모를때) (0) | 2021.02.12 |
백준 1966 파이썬 _ 프린터 큐 (0) | 2021.02.12 |