✏️ 문제
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
✏️ 풀이방법
1. 단어의 입력을 담을 리스트(words)와 정렬된 단어를 담을 리스트(sortword)를 생성한다.
2. 중복된 단어는 하나만 남기기위해 집합(set)자료형으로 중복을 제거한다.
3. 사전순으로 정렬하기 위해 sort()메소드를 사용한다.
4. 문자열의 길이는 50이 넘지 않는 것을 활용해서 문자열의 길이를 반복을 통해 확인해서 길이가 짧은 순으로 리스트(sortword)에 추가한다.
📌 코드
n = int(input())
words = []
sortword = []
for _ in range(n):
words.append(input())
words = list(set(words)) #중복제거
words.sort() #오름차순정렬
#길이순 정렬
length = 0
while True:
length += 1
for i in range(len(words)):
if len(words[i]) == length:
sortword.append(words[i])
if len(sortword) == len(words):
break
for i in sortword:
print(i)
n = int(input())
words = []
sortword = []
for _ in range(n):
words.append(input())
words = list(set(words)) #중복제거
words.sort() #오름차순정렬
#길이순 정렬
for i in range(1,50+1):
for j in range(len(words)):
if len(words[j]) == i:
sortword.append(words[j])
for i in sortword:
print(i)
📌 결과
#입력
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
#출력
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
🤔 시행착오.1
n = int(input())
words = []
for _ in range(n):
words.append(input())
# 단어의 길이 50안넘으니까 길이를 카운트하면서 정렬
# 단어개수만큼 리스트에 담아서
for i in range(len(words)):
words.sort(len(words[i]))
print(words)
TypeError: sort() takes no positional arguments
- sort메소드는 위치를 인자로 받을 수 없다. 인자는 sorted()함수인 경우에는 받을 수 있다.
🤔 시행착오.2
word = input()
dic = []
words = []
for i in range(5):
dic.append(ord(word[i]))
dic.sort()
print(dic)
for j in range(5):
words.append(chr(dic[j]))
print(words)
- 알파벳정렬 할 때 문자를 숫자로 바꿔서 아스키코드로 변환 하려고 했다.
- 문자열도 정렬하면 자동으로 알파벳순서로 정렬해주는데 숫자만 정렬된다고 생각했다.
- 문자 정렬시에는 대문자가 소문자보다 우선으로 정렬된다.
🔎 다른풀이
n = int(input())
words = []
for i in range(n):
words.append(input())
words = list(set(words)) #중복제거
words.sort() #오름차순 정렬
words.sort(key = len) #길이순 정렬
for i in words:
print(i)
- 정렬을 sort메소드에 key 옵션으로 len을 사용해서 길이순으로 정렬한다.
📒 다시보기
[Python] 12. sort()메소드와 sorted()함수
sort() 메소드 sort()는 메소드로 특정 자료(리스트)에 대해 정렬 기능을 수행 sort(): 오름차순 정렬 / sort(reverse = True): 내림차순 정렬 메소드는 반환값이 없기 때문에 기존 객체(리스트)를 정렬 ex_list
somin0416.tistory.com
[Python] 16. 리스트 중복 제거
리스트 내의 중복되는 원소가 있으면 다음과 같은 방법으로 중복을 제거할 수 있다. 1. for문을 사용해서 중복 제거하기 2. set을 사용해서 중복 제거하기 3. dictionary를 사용해서 중복 제거하기 1. fo
somin0416.tistory.com
'Python > online judge' 카테고리의 다른 글
백준 [11651.좌표 정렬하기2] | Python (0) | 2024.01.29 |
---|---|
백준 [3009.네 번째 점] | Python (0) | 2024.01.29 |
백준 [2745.진법 변환] | Python (0) | 2024.01.12 |
백준 [2750.수 정렬하기] | Python (0) | 2024.01.10 |
백준 [11653.소인수분해] | Python (0) | 2024.01.10 |