반응형
문제 : https://www.acmicpc.net/problem/1181
첫번째 풀이 (정답)
import sys
from collections import defaultdict
input = sys.stdin.readline
n = int(input().strip())
datas = set() # 1. 중복제거
dic = defaultdict(list) # 디폴트딕셔너리 = 키값이 없어도 바로 키랑 값 넣을 수 있음
for i in range(n):
s = input().strip()
datas.add(s)
#2. 순서대로 정렬
datas = sorted(list(datas), key=lambda x:len(x))
# 3. 길이에 따라 딕셔너리에 구분
for s in datas:
dic[len(s)].append(s)
#4. 길이 별로 문자열 순서로 정렬
for k in dic.keys():
dic[k].sort()
for i in range(len(dic[k])):
print(dic[k][i])
정렬하는 과정이 복잡하고
두번째 풀이
관점을 바꿔서 알파벳 순서로 정렬을 한 뒤, 길이로 정렬
import sys
from collections import defaultdict
input = sys.stdin.readline
n = int(input().strip())
datas = set() # 1. 중복제거
for i in range(n):
s = input().strip()
datas.add(s)
datas = list(datas)
#사전순으로 정렬
datas.sort()
#3. 순서대로 정렬
datas = sorted(list(datas), key=lambda x:len(x))
for s in datas:
print(s)
세번째 풀이
import sys
input = sys.stdin.readline
n = int(input().strip())
datas = []
for i in range(n):
s = input().strip()
datas.append((len(s), s))
# 중복 제거
datas = list(set(datas))
datas.sort()
for s in datas:
print(s[1])
문자와 길이를 하나로 묶어 저장
주의사항 두 원소를 묶고 set으로 변환해서 중복을 제거할 경우 set의 원소는 list가 불가능 하고 튜플만 가능
list를 넣으면 TypeError: unhashable type: 'list' 에러 발생
반응형
'ProblemSolving > 정렬' 카테고리의 다른 글
프로그래머스 H-index (파이썬) (0) | 2022.05.06 |
---|---|
프로그래머스 가장 큰 수 (0) | 2022.05.06 |
백준 11652 카드 (python) (0) | 2022.03.28 |
백준 10989 수 정렬하기 3 (python) (0) | 2022.03.28 |
백준 2751 수 정렬하기 2 (python) (0) | 2022.03.28 |