백준 1181번 풀이
문제풀러가기
https://www.acmicpc.net/problem/1181
문제
풀이
1. 문자열 길이가 가장 작은 순으로 정렬
len(string) 사용
2. 문자열 길이가 같을 시, 사전순으로 정렬
문자열 비교 사용: string1>string2
3. 리스트 중복제거 사용
arr_list = list(set(arr_list))
코드
import sys
N = int(sys.stdin.readline())
arr = []
arr_seq = []
for i in range (N):
arr.append(str(sys.stdin.readline()))
arr = list(set(arr)) #중복 제거
arr.sort() #알파벳 우선순으로 정렬
for i in range(len(arr)):
arr_seq.append([len(arr[i]), i])
#길이 정렬부터 하기 위해 문자열의 길이와,
# arr리스트안에서의 문자열 인덱스를 arr_seq 리스트에 추가
arr_seq.sort() #길이 우선순으로 정렬
for i in range(len(arr_seq)):
str_index = arr_seq[i][1] #문자열이 arr리스트에서의 인덱스
print(arr[str_index],end="") #end=""으로 개행문자 제거
코드 풀이
1. 우선 문자열을 arr리스트에 담습니다.
2. arr리스트에서 set을 통해 중복 제거를 해줍니다.
3. 사전순으로 정렬해야 하므로 arr.sort를 통해 정렬을 해줍니다.
* arr.sort를 안해줄 시 마지막 출력에 사전순으로 정렬이 안됩니다.
4. 또다른 리스트 arr_seq에는 arr리스트에 담겨있는 문자열들의 길이와 인덱스를 담아 넣습니다 => (len(arr[i]), i)
5. arr_seq.sort를 해줄 시, len(arr[i])를 우선순으로 정렬합니다.
6. arr_seq리스트에는 문자열의 길이가 작은 순부터 정렬 되어 있으며,3번에서
이미 사전순 정렬을 해줬기 때문에 arr_seq[i][1]대로 출력해주면 된다.
*arr_seq[i][1]은 문자열의 arr에서의 인덱스, 4번 참고
7. sys.stdin.readline에서 문자열을 출력할 경우 개행문자가 같이 출력되니 end=""으로 개행문자를 지워준다.
*혹은 처음부분에서 arr.append(str(sys.stdin.readline().strip()))을 쓰면 된다.
*int(sys.stdin.readline()) 같이 int형일 경우는 개행문자 출력 안됨.
도움이 되셨다면 하트 꾹 눌러주세요 :)
'코딩테스트 > 코딩테스트 문제' 카테고리의 다른 글
코딩테스트 준비 - 백준18870번 좌표압축 풀이:파이썬 딕셔너리 활용 (파이썬) (0) | 2021.06.07 |
---|---|
코딩테스트 준비 - 백준10814번 나이순 정렬 풀이:파이썬 람다 리스트 정렬 (파이썬) (0) | 2021.06.06 |
코딩테스트 준비 - 백준11651번 좌표 정렬하기 풀이(간단한 풀이)(파이썬) (0) | 2021.06.04 |
코딩테스트 준비 - 백준11650번 좌표 정렬하기 풀이(간단한 풀이):파이썬 튜플 괄호 없애기 (파이썬) (0) | 2021.06.03 |
코딩테스트 준비 - 백준1427번 풀이:파이썬 숫자 정렬(파이썬) (0) | 2021.06.03 |
댓글