알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
길이가 짧은 것부터길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
📌 문제 탐색하기
우리가 문제를 이해해가는 과정을 작성하시면 됩니다.
- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정
- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정
- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정 등을 작성해주시면 됩니다.
알고리즘 선택
- 순서대로 정렬해주는 sort() 함수 사용
📌코드 설계하기
위의 문제 탐색하기에서 고민한 과정을 토대로 문제 풀이에 대한 실마리를 잡으셨을 것 같습니다.
이제 문제 풀이를 본격적으로 하기 전, 이 문제를 풀기 위한 로드맵을 그려보겠습니다.
어떤 순서로 코드를 작성해야 할지, 어떤 함수들을 작성해야 할지 등을 작성해주시면 됩니다.
처음에는 어려울 수 있지만, 문제를 풀기 전 미리 지도를 그린다라는 생각으로 적어나가 보시면 좋을 것 같습니다 :)
- 단어 입력 개수를 정수로 입력 받는다.
- 1번에서 정의한 수만큼 단어를 입력하고 각 단어를 하나의 리스트에 저장한다.
- 사전순으로 리스트를 정렬한다.
- 리스트 안의 단어들을 길이 값으로 정렬한다. : sort() 함수 사용
- 정렬된 최종 리스트를 결과 형태와 동일하게 출력한다.
📌 시도 회차 수정 사항 (Optional)
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.
시도1
- 사전순으로 리스트 정렬하는 부분을 놓쳤음.
sort( ) 함수 추가 옵션
# .sort() 메서드를 사용하여 리스트를 알파벳순/오름차순 정렬
list.sort()
# .sort() 메서드를 사용하여 리스트를 문자열 길이순으로 정렬
list.sort(key=len)
# 내림차순으로 정렬
list.sort(reverse=True)
📌정답 코드
import sys
# 입력 개수
N = int(input())
# N개의 단어 입력
words = []
for _ in range(N):
word = input()
words.append(word)
# 중복 제거
words = list(set(words))
# 사전 순으로 정렬
words.sort()
# 길이 기준으로 정렬
words.sort(key=lambda x : (len(x))) # 또는 words.sort(key=len) 가능
# 리스트를 한줄로 출력
print(*words, sep='\n')
반응형
'Study > Algorithm' 카테고리의 다른 글
[코테 챌린지] 6일차. 나무조각 (0) | 2024.08.10 |
---|---|
[코테 챌린지] 4일차. 생일 (0) | 2024.08.08 |
[코테 챌린지] 2일차. 나이순 정렬 (0) | 2024.08.06 |
[코테 챌린지] 1일차. 일곱난쟁이 (0) | 2024.08.05 |
[Optical Flow] 옵티컬 플로우3 - Optical Flow 개념 이해 (0) | 2023.07.03 |