티스토리 뷰

Etc/Algorithm & Solving

[Python] 백준 1181

charming-l 2022. 2. 4. 15:51

[문제]

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
1. 길이가 짧은 것부터
2. 길이가 같으면 사전 순으로

 

[내 코드]

import sys
T = int(sys.stdin.readline().rstrip())
dic = {}
for line in sys.stdin:
    txt = line.rstrip()
    if txt in dic.keys():
        continue
    dic[txt] = len(txt)

for k, v in sorted(dic.items(), key=lambda x: (x[1], x[0])):
    print(k)

 입력된 단어들 중 중복된 단어가 없다길래, 이를 키로 갖는 딕셔너리 구조는 어떨까 싶었다.

 

그 후 들어온 입력 값을 줄마다 처리하기 위해

for line in sys.stdin: 

를 사용하였고,

 

lambda함수를 통해 여러가지의 기준으로 정렬할 수 있다는 것을 알았다!

dic.items()로 뽑아내는 순간 이미 딕셔너리 구조가 아닌 key와 value를 쌍으로 가진 iterable 객체로 변환되기 때문에, 인덱싱을 하여 기준으로 이용할 수 있는 것 같다.

print(dict_items())
>>dict_items([('but', 3), ('i', 1), ('wont', 4), ('hesitate', 8), ('no', 2), ('more', 4), ('it', 2), ('cannot', 6), ('wait', 4), ('im', 2), ('yours', 5)])

 

어떤 분들은 set() 메서드를 활용하여 텍스트 중복을 제거하신 분도 있었는데, 시간이 더 절약되는 것을 보았다. 나도 담부터는 데이터구조를 잘 이용해보자!

 

 

 

[참조]

https://blog.advenoh.pe.kr/python/%ED%8C%8C%EC%9D%B4%EC%8D%ACEB%94%95%EC%85%94%EB%84%88%EB%A6%AC-%EB%A6%AC%EC%8A%A4%ED%8A%B8%EC%97%90%EC%84%9C-%ED%8A%B9%EC%A0%95-%ED%82%A4-%EA%B0%92%EC%9C%BC%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%98%EA%B8%B0/

 

Comments