😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[1181번] 단어 정렬 / python3 (2차원 리스트 활용하기)

또방91 2021. 11. 9. 20:42
728x90

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

 

1181번: 단어 정렬

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

www.acmicpc.net


❌ 1차시도 실패

중복되는 데이터를 제거해야하는 데 그냥 출력해부렸다.😝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1차시도(실패)---------------------
 
import sys
n=int(sys.stdin.readline())
 
# 2차원 리스트를 만들어요
# ex)단어길이가 1이면 list[1]에 들어감
len_list=[[]*51 for _ in range(51)] 
 
for _ in range(n):
    num=input()
    len_list[len(num)].append(num)
    
# sort 진행하고 출력해요
for i in range(1,51):
    len_list[i].sort()
    for j in len_list[i]:
        print(j)
cs

❓ 정답은 ??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
n=int(sys.stdin.readline())
 
# 2차원 리스트를 만들어요
# ex)단어길이가 1이면 list[1]에 들어감
len_list=[[] for _ in range(51)] 
 
for _ in range(n):
    num=input( )
    len_list[len(num)].append(num)
    
# sort 진행하고 출력해요
for i in range(1,51):
    #len_list[i]리스트 값을 set로 바꿔서 중복제거
    len_list[i]=set(len_list[i])
    #다시 list로 바꿔서 sort하기
    len_list[i]=list(len_list[i])
    len_list[i].sort( )
    
    for j in len_list[i]:
        print(j)
cs

💯 풀이 과정

len_list 리스트를 만들고 [[ ], [ ] ...... [ ]] 이때 리스트는 0부터 시작해버리니 51개를 만들어줘야함

그 리스트에는 list[1]에는 단어길이가 1인 아이들이, list[2]에는 단어길이가 2인 아이들이...

쭉 반복하며 넣어준다.

 

2차원리스트에 append하는 거기에 헷갈리지 않게 잘 넣어준다.

 

set는 중복이 되지 않는 다른 점을 이용해 잠시 세트로 바꿔줬다가 다시 리스트로 만들어 부렸다

너무 아날로그 방식처럼 대입한거 아닌가 생각했지만, 맞았다고 뜨니 스킵 ㅋㅋㅋ


😎오늘의 한줄평: 문제를 잘 읽자. 조건 빼먹지 말고

728x90