본문 바로가기
Study/Algorithm

[코테 챌린지] 3일차. 단어 정렬

by _YUJIN_ 2024. 8. 7.
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
길이가 짧은 것부터길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.

📌 문제 탐색하기 

우리가 문제를 이해해가는 과정을 작성하시면 됩니다.
- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정
- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정
- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정 등을 작성해주시면 됩니다.

알고리즘 선택

  • 순서대로 정렬해주는 sort() 함수 사용

📌코드 설계하기 

위의 문제 탐색하기에서 고민한 과정을 토대로 문제 풀이에 대한 실마리를 잡으셨을 것 같습니다.
이제 문제 풀이를 본격적으로 하기 전, 이 문제를 풀기 위한 로드맵을 그려보겠습니다.
어떤 순서로 코드를 작성해야 할지, 어떤 함수들을 작성해야 할지 등을 작성해주시면 됩니다.
처음에는 어려울 수 있지만, 문제를 풀기 전 미리 지도를 그린다라는 생각으로 적어나가 보시면 좋을 것 같습니다 :)
  1. 단어 입력 개수를 정수로 입력 받는다.
  2. 1번에서 정의한 수만큼 단어를 입력하고 각 단어를 하나의 리스트에 저장한다. 
  3. 사전순으로 리스트를 정렬한다. 
  4. 리스트 안의 단어들을 길이 값으로 정렬한다. : sort() 함수 사용 
  5. 정렬된 최종 리스트를 결과 형태와 동일하게 출력한다. 

📌 시도 회차 수정 사항 (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')
반응형