씻고 문제 풀다가 추워서 이불 속에 들어가서 풀고 있었는데
어떻게 풀지 엄청 고민하다가
그냥 잠들어버렸다. 새벽에 부랴부랴 하고 있던거라도 저장해두었음..
학교와서 곰곰이 생각해보니...이거 카운팅 정렬하듯이 해봐도 될 거 같은데? 싶고
제한으로 둔 문자 길이나, 단어 개수도 제법 작은 숫자들이길래 가능하겠다싶어서 도전.
2차원 배열을 선언해서 글자 개수를 인덱스로 해서 할당하고 출력하기 전에 sorting해주면 되지 않을까 생각했다.
그러면서 하나 배운게 있다!
예전에 곱셈으로 2차원 배열을 선언했던 것 같아서 무작정
temp_list = [[]*51]
로 선언했는데
놀랍게도 하나만 바꿔도 51개의 배열이 다 바뀌는 것..!!!!!!
얕은 복사 때문이었다.
파이썬에서 2차원 배열을 선언할때는 얕은 복사를 막기 위해
temp_list = [[] for _ in range(51)]
과 같이 for문을 이용해야 한다는 것을 배웠다.
그래서 나의 해결 코드는~
import sys
n = int(input())
# 배열선언
temp_list = [[] for _ in range(51)]
# 자릿수를 인덱스로 해서 List에 할당
for i in range(n):
str_list = sys.stdin.readline().rstrip('\n')
if str_list not in temp_list[len(str_list)]:
temp_list[len(str_list)].append(str_list)
# 리스트 별로 알파벳 순 sort
for j in range(51):
if len(temp_list) != 0:
temp_list[j].sort()
for k in range(len(temp_list[j])):
# 출력
print(temp_list[j][k])
이렇다. 뿌듯~