백준

백준 1181번: 단어 정렬

1181번: 단어 정렬 (acmicpc.net)

 

1181번: 단어 정렬

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

www.acmicpc.net

 

처음 시도

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
= int(input())
word = []
length = []
equal = []
le = []
for i in range(n):
    w=input()
    if w not in word:
        word.append(w)
        length.append(len(w))
for _ in range(len(word)):
    if len(length)==0:
        exit(0)
    m= length.index(min(length))
    equal.append(word[m])
    del word[m]
    le.append(length[m])
    del length[m]
    if le[0not in length:
        for j in range(len(equal)):
            temp = min(equal)
            print(temp)
            del equal[equal.index(temp)]
            del le[0]
cs

 

두 번째 시도

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
= int(input())
word = []
j=0
for i in range(n):
    word.append([])
    w = input()
    word[i].append(w)
    word[i].append(len(w))
word = map(tuple,word)
word = set(word)
word = list(word)
word = sorted(word, key=lambda x: (x[1], x[0]))
for _ in word :
    print(word[j][0])
    j+=1
 
cs

 

처음 시도에서는 이중 for문을 이용해서 접근했는데 시간 초과로 인해 다른 방법으로 접근해야 한다는 것을 알게 됨두 번째 시도에서는 선배의 조언을 듣고 람다로 접근해야 한다는 사실을 알게 됨. 이 문제만 가지고 3일에 걸쳐서 10시간 정도 시간을 쓴 것 같다

 

'백준' 카테고리의 다른 글

백준 2609번: 최대공약수와 최소공배수  (0) 2021.05.07
백준 11651번: 좌표 정렬하기 2  (0) 2021.05.07
백준 2164번: 카드2  (0) 2021.05.06
백준 1436번: 영화감독 숌  (0) 2021.05.04
백준 10250번: ACM 호텔  (0) 2021.05.03