아이디어지니
아이디어지니 : 개발이야기
아이디어지니
전체 방문자
오늘
어제
  • 분류 전체보기 (26)
    • 안드로이드 (11)
    • 50자다이어리 (2)
    • 코딩테스트 (13)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 커스텀정렬
  • cmp_to_key
  • deprecated
  • null
  • 백준
  • 나도 할 수 있는 Java&Spring 웹 개발 종합반
  • TextUtils
  • App Restart
  • 안드로이드 애니메이션
  • 에라토스테네스의 체
  • jcenter
  • andorid
  • onStartCommand
  • 바인딩 서비스
  • 패스트캠퍼스
  • greenDAO
  • 파이썬
  • 코딩테스트
  • Interpolator
  • TextView
  • 내일배움카드
  • functools
  • 안드로이드 서비스
  • 1181
  • 안드로이드
  • K디지털기초역량훈련
  • 단어정렬
  • setrecursionlimit
  • null check
  • 앱재시작

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아이디어지니

아이디어지니 : 개발이야기

코딩테스트

[코딩테스트][파이썬] 백준 1181, 단어정렬

2022. 9. 7. 04:34

문제 

알파벳 소문자가 n개 주어진다. n개의 소문자를 길이순으로 정렬하되 길이가 같으면 사전순으로 정렬하여 출력하시오. 단, 중복된 단어는 한 번만 출력한다.

 

풀이과정

백준의 solved 브론즈 문제들은 보통 정렬 기준이 하나였기 때문에 간단히 sort나 sorted로 별도 조건 없이 해결할 수 있었다. 실버 5에서부터는 정렬의 조건이 두 가지인 문제가 등장해서 정렬에 대해서 공부하고자 기록에 남기기로 했다. 본 문제는 3가지로 풀 수 있다.

 

1. cmp_to_key를 이용해서 정렬 기준을 커스텀해서 풀기

함수로 compare_chr(a,b)로 정렬 기준을 정의해 주고 sort(key = )에 정렬 기준을 넣어준다.

# 956ms
from functools import cmp_to_key

def compare_chr(a, b) :
  if len(a) > len(b) :
    return 1  
  elif len(a) == len(b) :
    if a > b :
      return 1
    elif a == b :
      return 0
    else : 
      return -1
  else :
    return -1

n = int(input())
res = set()
for _ in range(n) :
  res.add(input())
for item in sorted(res, key = cmp_to_key(compare_chr)) :
  print(item)

2. 커스텀 없이 sort()만 이용한 방법

사전적으로 우선 정렬한 뒤 길이순으로 정렬해준다.

# 1080ms
n = int(input())
res = set()
for _ in range(n) :
  res.add(input())
res = list(res)
res.sort() # 사전적 정렬
res.sort(key = len) # 길이순

for item in res :
  print(item)

3. lambda식를 이용해 정렬

lambda식을 이용해서 정렬 기준을 길이순 - 사전순으로 정해준다. 이 방법이 실행 시간이 860ms로 가장 빨랐다. 실행 시간은 input을 sys.stdin.readline으로 대체하면 더 빨라진다.

# 860ms
n = int(input())
res = set()
for _ in range(n) :
  res.add(input())
res = list(res)
res.sort(key= lambda x : (len(x), x))
for item in res :
  print(item)

'코딩테스트' 카테고리의 다른 글

[코딩테스트][파이썬] 재귀함수 깊이제한 setrecursionlimit  (0) 2022.11.14
[코딩테스트][파이썬] 소수 구하기  (0) 2022.09.29
[파이썬] 팩토리얼 !, 계승  (0) 2022.08.29
[파이썬] 최대공약수와 최소공배수  (0) 2022.08.27
    '코딩테스트' 카테고리의 다른 글
    • [코딩테스트][파이썬] 재귀함수 깊이제한 setrecursionlimit
    • [코딩테스트][파이썬] 소수 구하기
    • [파이썬] 팩토리얼 !, 계승
    • [파이썬] 최대공약수와 최소공배수
    아이디어지니
    아이디어지니
    할까 말까 할 때는 하라

    티스토리툴바