용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (248)
    • 개발 (75)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (19)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(Python) 백준 1181번 - 단어 정렬
알고리즘/알고리즘 문제 풀이

(Python) 백준 1181번 - 단어 정렬

2022. 12. 24. 03:23

문제 링크 : https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

 

풀이

arr = []
for _ in range(int(input())):
    m = input()
    if m in arr:
        continue
    if len(arr) == 0:
        arr.append(m)
    for i in range(len(arr)):
        if len(arr[i]) > len(m):
            arr.insert(i, m)
            break
        elif len(arr[i]) == len(m):
            if arr[i] > m:
                arr.insert(i, m)
                break
    if m not in arr:
        arr.append(m)

for i in arr:
    print(i)

 

처음엔 위와 같이 in, len()과 비교 연산 등을 사용하여 문제를 풀려했으나 시간 초과가 발생하였다. O(n²)의 비교 연산을 여러 번 수행하기 때문이라고 생각해 python의 sort를 사용해보았다.

s = set([])
for _ in range(int(input())):
    m = input()
    s.add(m)
s = list(s)
s.sort()
s.sort(key=len, reverse=False)

for i in s:
    print(i)

 

일단 set을 활용하여 중복되는 값이 들어가지 않도록 하였고, 그 후 set을 리스트로 변환하였다.

첫번째 sort에선 문제의 요구사항대로 사전순으로 정렬하였고,  두번째 sort에서는 key로 len을 사용하여 글자 수가 짧은 순서대로 정렬하였다.  

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(Python) 백준 2751번 - 수 정렬하기 2  (0) 2022.12.27
(Python) 백준 1978번 - 소수 찾기  (0) 2022.12.26
(Python) 백준 1436번 - 영화감독 숌  (0) 2022.12.25
(Python) 백준 10989번 - 수 정렬하기 3  (0) 2022.12.20
(Python) 백준 1259번 - 팰린드롬수  (1) 2022.09.23
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (Python) 백준 1978번 - 소수 찾기
    • (Python) 백준 1436번 - 영화감독 숌
    • (Python) 백준 10989번 - 수 정렬하기 3
    • (Python) 백준 1259번 - 팰린드롬수
    용꿀
    용꿀

    티스토리툴바