https://www.acmicpc.net/problem/1181
문제
내 풀이
n = int(input())
a = []
for i in range(n):
inp = input()
if [len(inp), inp] not in a:
a.append([len(inp), inp])
a.sort(key=lambda x: (x[0], x[1]))
for i in range(len(a)):
print(a[i][1])
해설
풀긴했으나 너무 비효율적으로 풀었다. 걸리는 시간이 다른 사람과 비교해 10배 정도 차이가;;
거기가 lambda 활용이 좋지 않았다.
정답 풀이
import sys
n = int(input())
dic = list(set([sys.stdin.readline().strip() for _ in range(n)]))
dic = sorted(dic, key=lambda x: (len(x), x))
print('\n'.join(dic))
출처:https://velog.io/@cosmos/BOJ-1181-python
https://www.acmicpc.net/source/16465719
해석
sys.stdin.readline()은 '\n\'을 포함하는 입력이기 때문에 연속으로 값을 입력받는 for문에서 에러가 발생했다.
그래서 .strip()입력해주니까 통과.
key를 람다를 통해 두개를 동시에 주는게 인상적이다. 물론 나도 그렇게 사용햇지만, 이를 위해 일부러 dic 자료형으로 list에 넣었었다. 하나의 원소만으로도 두개의 조건으로 sort 함수를 이용할 수 있음을 기억하자.
또한 list에 저장된 정답을 for문으로 출력하지 않고, join함수로 한번에 출력한다는 점이 인상깊다.
다만 구분자 없이 할경우 이 문제에서 요구되는 형식으로 출력이 안됨으로 \n이라는 줄바꾸기를 구분자로 넣었다.
'sw사관학교 정글 2기 > 01 기초,재귀,완전탐색, 정렬' 카테고리의 다른 글
[완전탐색] 백준 외판원 순회 2 10971번 with Python3★★★ (0) | 2021.08.10 |
---|---|
[완전탐색] 백준 N-queen 9663번 with Python3 ★★★ (0) | 2021.08.10 |
[정렬]★★ 백준 수의 정렬 1,2,3 with Python3 (0) | 2021.08.10 |
[완전탐색] 백준 10819번 차이를 최대로 with Python3 (0) | 2021.08.10 |
[완전탐색] 백준 2309번 일곱 난쟁이 with Python3 (0) | 2021.08.10 |
댓글