1181 단어 정렬
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
제출 코드
word_list = list() sorted_word_list = list() for _ in range(int(input())): word_list.append(input()) set_word_list = set(word_list) for word in set_word_list: sorted_word_list.append((len(word), word)) sorted_word_list.sort() for word_len, word in sorted_word_list: print(word)
코드 설명
딱히 뾰족한 아이디어가 떠오르지 않아 그냥 무식하게 해결했다.
Line 1~2
: 입력받은 문자를 저장할 리스트, 문자를 정렬한 이후 저장할 리스트 선언
Line 3~4
: N번 반복하며 문자를 입력받는다.
Line 6
: 입력받은 문자들 중 중복 제거를 위하여set type
으로 형변환 진행
집합set
은 중복을 허용하지 않는다.
Line 8~9
: 중복을 제거한 집합으로부터 원소를 하나씩 꺼내 (단어의 길이, 단어) 튜플을
sorted_word_list
에 추가
Line 11
: 리스트 원소들의 길이를 기준으로 리스트 정렬
Line 12~13
: 리스트로 부터 문자 출력
다른 사람의 풀이
words_num = int(input()) words_list = [] for _ in range(words_num): word = str(input()) word_count = len(word) words_list.append((word, word_count)) words_list = list(set(words_list)) words_list.sort(key = lambda word: (word[1], word[0])) for word in words_list: print(word[0])
필자의 코드와 비슷하게 푸셨다.
다만, 리스트 내부 정렬을 진행할 때
lambda
식을 활용하여 단어의 숫자와 알파벳에 우선순위를 두어한줄로 정렬을 진행하셨다.
'Algorithm & SQL > Baekjoon' 카테고리의 다른 글
[Alogorithm] [Python] 백준/BOJ - 11651_좌표 정렬하기2 (0) | 2019.10.20 |
---|---|
[Algorithm] [Python] 백준/BOJ - 1427 소트인사이드 (0) | 2019.10.19 |
[Algorithm] [Python] 백준/BOJ - 1026 보물 (0) | 2019.10.18 |
[Algorithm][Python] 백준/BOJ - 9012_괄호 (0) | 2019.10.16 |
[Algorithm][Python] 백준/BOJ - 10073_제로 (0) | 2019.10.14 |