반응형
split()
입력 문자열을 공백 (스페이스, 탭, 개행 등) 기준으로 리스트 형태로 반환
사용 예시
word = input().split()
# 입력
hello world
# 결과
word = ['hello', 'world'] # 리스트로 저장
strip()
입력 문자열의 양쪽 끝에 있는 공백 (스페이스, 탭, 개행 등) 을 제거하고, 문자열로 반환
사용 예시
word = input().strip()
# 입력
hello
# 결과
word = 'hello' # 문자열로 저장
백준 1181 단어 정렬을 다시 풀어보면서, 나도 모르게 split() 을 썼는데
중복 제거를 하려고 썼던 data_list = list(set(data_list)) 에서 아래와 같은 에러가 나왔다
Traceback (most recent call last):
File "/Users/-/07_정렬/09_1181_단어정렬.py", line 19, in <module>
word_list = list(set(word_list))
^^^^^^^^^^^^^^
TypeError: unhashable type: 'list'
hashable
Hash 는 특정 데이터를 고정된 크기의 고유 값 (해시 값) 으로 매핑하는 알고리즘이다
Hashable 객체란, 고유한 해시 값을 가지며 동일한 값에 대해 항상 같은 해시 값을 반환하는 객체를 의미한다
객체의 내용이 변경되면 해시 값이 달라질 수 있으므로, hashable 하려면 객체는 변하지 않아야 한다
Immutable 자료형은 그 내용이 변하지 않으므로 항상 같은 해시 값을 가진다, 따라서 Hashable 하다
반대로, Mutable 자료형은 내용이 변할 수 있으므로 (고유한 해시 값을 보장할 수 없어) Unhashable 하다
문자열 str 은 항상 같은 해시 값을 반환하여 Hashable 하지만
리스트 List 는 Mutable (변경 가능)하기 때문에 고유한 해시 값을 보장할 수 없다
튜플 Tuple 도 불변이므로 Hashable 하다
따라서 set 을 사용하기 위해서는 List 가 아닌 str or Tuple 을 사용해야 하고,
1181 단어 정렬은 아래 코드처럼 정리할 수 있다
백준 1181 단어 정렬
# https://www.acmicpc.net/problem/1181
# 알파벳 소문자로 이루어진 N개의 단어를 아래 조건에 따라 정렬하는 문제
# 1. 길이가 짧은 것부터
# 2. 길이가 같으면 사전 순으로
# 중복된 단어는 하나만 남기고 제거
# 중복 단어는 set 으로 없애고
# 사전 순 정렬 -> 길이 순 정렬하면 되겠다
n = int(input().strip()) # 입력 받을 단어의 개수
word_list = [] # 입력 받은 단어를 저장할 리스트
# 입력 받기
for _ in range(n):
word_list.append(input().strip())
# 중복 단어 없애기
word_list = list(set(word_list))
# 사전 순 정렬
word_list.sort()
# 길이 순 정렬
word_list.sort(key=lambda data: len(data))
# 단어 하나씩 출력하기
for word in word_list:
print(word)
반응형
'TIL > Python' 카테고리의 다른 글
Insert Dummy Data into MySQL w/ Python (0) | 2025.02.11 |
---|---|
[TIL] B-Tree, B-트리 (1) | 2024.10.04 |
[TIL] 배낭 문제 Knapsack Problem (0) | 2024.10.01 |
[TIL] LCS 알고리즘 (1) | 2024.09.30 |
[TIL] 그리디 알고리즘 Greedy Algorithm (0) | 2024.09.29 |