BOJ1181 - 단어 정렬 (python3)

Ok Haeeun·2023년 3월 20일
0

Python3로 algorithm문풀

목록 보기
32/53

씻고 문제 풀다가 추워서 이불 속에 들어가서 풀고 있었는데
어떻게 풀지 엄청 고민하다가
그냥 잠들어버렸다. 새벽에 부랴부랴 하고 있던거라도 저장해두었음..

학교와서 곰곰이 생각해보니...이거 카운팅 정렬하듯이 해봐도 될 거 같은데? 싶고
제한으로 둔 문자 길이나, 단어 개수도 제법 작은 숫자들이길래 가능하겠다싶어서 도전.

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])

이렇다. 뿌듯~

profile
tistory에 이어서 기록합니다 👉 https://i-m-okay.tistory.com/

0개의 댓글

관련 채용 정보