단어 정렬 성공분류
시간 제한 |
메모리 제한 |
제출 |
정답 |
맞은 사람 |
정답 비율 |
2 초 |
256 MB |
42597 |
16910 |
12610 |
39.613% |
https://www.acmicpc.net/problem/1181
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
길이가 짧은 것부터
길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
알고리즘 분류
백준 알고리즘 # 1181번 : 단어 정렬
n = int(input())
word = []
for i in range(n):
word.append(input())
set_word = list(set(word))
sort_word = []
for i in set_word:
sort_word.append((len(i), i))
result = sorted(sort_word)
for len_word, word in result:
print(word)
풀이
정렬 문제는 이제 쉽게 풀 수 있는 것 같아요😆
n 변수로 단어의 개수를 입력받고 word를 리스트로 설정한 뒤 n번만큼 for문으로 단어들을 추가(append)해줍니다.
key point 1
다음으로 중복을 허용하지 않는 set의 특성을 이용해서 중복을 제거해주고(하지만 순서는 뒤죽박죽)
집합 자료형은 { }로 묶이므로 list를 앞에 써주어서 [ ]로 묶어줍니다.
다음으로 뒤죽박죽한 순서를 정렬하기 위해 sort, sorted를 써줄건데
그 전에 set를 진행한 리스트를 for문을 통해 반복해주면서
key point 2
set_word 리스트에 들어있는 단어를 (len(word), word)로 묶어서 저장해줍니다.
"""
print해본 결과:
[(2, 'im'), (4, 'wait'), (4, 'more'), (5, 'yours'), (3, 'but'), (4, 'wont'), (6, 'cannot'), (1,
'i'), (2, 'no'), (2, 'it'), (8, 'hesitate')]
"""
위에 출력된 것처럼 이제 sorted 코드를 쓰면, 앞에 있는 숫자와 뒤에 있는 문자가 순서대로 자동 정렬이 됩니다.
key point 3
마지막으로 sorted로 정렬한 리스트의 인덱싱 하나마다 2개의 인수(argument)가 있기 때문에
for문에서 len(word)와 word 2개의 매개변수(parameter)를 쓴 후
최종 출력 값에 필요한 word만 출력하면 풀이 끄--읏!💪🏻
자세한 코드가 궁금하신 분들은 아래 GitHub 코드를 참고해주세요🙏🏻
최종 소스코드
'코딩테스트 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 | 2523 : 별 찍기 - 13 (Python / 파이썬) (0) | 2020.12.18 |
---|---|
백준 알고리즘 | 2920 : 음계 (Python / 파이썬) (0) | 2020.12.17 |
백준 알고리즘 | 11650 : 좌표 정렬하기 (Python / 파이썬) (0) | 2020.12.15 |
백준 알고리즘 | 10039 : 평균 점수 (Python / 파이썬) (0) | 2020.12.14 |
백준 알고리즘 | 13458 : 시험 감독 (Python / 파이썬) (0) | 2020.12.13 |
댓글